все Python 3copyфункция
__deepcopy__
кастомизация
Метод, который вызывает copy.deepcopy(obj): своя глубокая копия. Принимает словарь memo уже скопированного.
Синтаксис
def __deepcopy__(self, memo): ...
memo — словарь id(оригинал) → копия: его нужно передавать во вложенные deepcopy, иначе циклические ссылки уйдут в бесконечную рекурсию, а общие объекты раздвоятся. Свою копию стоит записать в memo до копирования полей — тогда ссылка объекта на самого себя тоже разрешится.
Примеры
import copy
class Node:
def __init__(self, items):
self.items = items
def __deepcopy__(self, memo):
clone = Node(None)
memo[id(self)] = clone
clone.items = copy.deepcopy(self.items, memo)
return clone
a = Node([[1, 2]])
b = copy.deepcopy(a)
b.items[0].append(3)
print(a.items, b.items) # → [[1, 2]] [[1, 2, 3]]
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности