Python Glossary English

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