все Python 3copyфункция
__copy__
кастомизация
Метод, который вызывает copy.copy(obj), если он определён: своя логика поверхностной копии.
Синтаксис
def __copy__(self): ...
Без __copy__ модуль copy копирует объект сам: создаёт экземпляр того же класса и переносит его __dict__ — вложенные объекты остаются общими. Свой __copy__ нужен, когда часть состояния копировать нельзя или не нужно: соединение, кэш, счётчик. Метод не принимает аргументов кроме self.
Примеры
import copy
class Doc:
def __init__(self, text):
self.text, self.cache = text, {'len': len(text)}
def __copy__(self):
return Doc(self.text) # кэш у копии свой, а не общий
a = Doc('abc')
b = copy.copy(a)
print(b.text, b.cache is a.cache) # → abc False
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности