copy()

Contents
Введение
Пример
Применение
Похожие статьи

Введение

Теорию о том что такое глубокая (deep) и неполная (shallow) копии вы можете изучить в статье «Типы копирования»

Исходный код функции можно изучить здесь

"""Общие операции копирования (мелкого и глубокого). Краткое описание интерфейса: импортировать копию x = copy.copy(y) # сделать неглубокую копию y x = copy.deepcopy(y) # создайте глубокую копию y Для ошибок, характерных для конкретного модуля, скопируйте.Возникает ошибка. Разница между мелким и глубоким копированием актуальна только для составных объектов (объектов, которые содержат другие объекты, такие как списки или экземпляры классов). - Неглубокая копия создает новый составной объект, а затем ( насколько это возможно) вставляет в него * те же объекты*, что и оригинал. - Глубокая копия создает новый составной объект, а затем рекурсивно вставляет в него *копии* объектов, найденных в оригинале. При операциях глубокого копирования часто возникают две проблемы, которых нет при операциях неглубокого копирования: a) рекурсивные объекты (составные объекты, которые прямо или косвенно содержат ссылку на самих себя) могут вызывать рекурсивный цикл б) поскольку глубокое копирование копирует * все*, оно может копировать слишком много, например административные структуры данных, которые должны использоваться совместно даже между копиями Операция глубокого копирования в Python позволяет избежать этих проблем за счет: a) сохранение таблицы объектов, уже скопированных в течение текущего пропуск для копирования б) разрешение определяемым пользователем классам переопределять операцию копирования или скопированный набор компонентов Эта версия не копирует такие типы, как модуль, класс, функция, метод, ни трассировку стека, ни фрейм стека, ни файл, сокет, окно, ни любые подобные типы. Классы могут использовать те же интерфейсы для управления копированием, которые они используют для управления травлением: они могут определять методы, называемые __getinitargs__(), __getstate__() и __setstate__(). Смотрите документацию к модулю "pickle" для получения информации об этих методах. """

Синтаксис

copy(object)

Пример

import copy z = [2] y = z x = copy.copy(z) z.append(3) print("z =", z) print("y =", y) print("x =", x)

z = [2, 3] y = [2, 3] x = [2]

Смысл в том, что список x не изменился так как copy() создала новый объект а не просто ссылку на старый.

Banner Image

Применение

Рассмотрим функцию modify() из статьи про Объекты в Python

m = [0, 1, 2] print(f"m = {m}") def modify(k): k.append(3) print("k =", k) print("\nmodify(m)\n") modify(m) print(f"m = {m}") print("\nNo copy of m is made\n") print("\nmodify(m)\n") modify(m) print(f"m = {m}")

m = [0, 1, 2] modify(m) k = [0, 1, 2, 3] m = [0, 1, 2, 3] No copy of m is made modify(m) k = [0, 1, 2, 3, 3] m = [0, 1, 2, 3, 3]

Функция modify() работает с тем же объектом, поэтому его значения изменяются.

Изменить поведение функции modify() можно с помощью функции copy()

import copy m = [0, 1, 2] print(f"m = {m}") def modify(k): s = copy.copy(k) s.append(3) print("s =", s) print("\nmodify(m)\n") modify(m) print(f"m = {m}") print("\nNo copy of m is made\n") print("\nmodify(m)\n") modify(m) print(f"m = {m}")

m = [0, 1, 2] modify(m) s = [0, 1, 2, 3] m = [0, 1, 2] No copy of m is made modify(m) s = [0, 1, 2, 3] m = [0, 1, 2]

Related Articles
*args **kwargs
Лямбда функции
all()
any()
map()
zip()
sorted()
Функции первого класса
Замыкания
Декораторы
Кэширование
Python
if, elif, else
Циклы
Методы
enum

Search on this site

Subscribe to @aofeed channel for updates

Visit Channel

@aofeed

Feedbak and Questions in Telegram

@aofeedchat