Python Glossary English

все 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Сообщить о неточности