Операторы присваивания в Python не копируют объекты, они создают привязки между целью и объектом. Для коллекций, которые являются изменяемыми или содержат изменяемые элементы, иногда требуется копия, чтобы можно было изменить одну копию, не изменяя другую. Модуль copy обеспечивает общие операции неглубокого и глубокого копирования.
copy.copy(x):Функция copy.copy(x) возвращает мелкую копию x.
copy.deepcopy(x[, memo]):Функция copy.deepcopy() возвращает глубокую копию x.
copy.replace(obj, /, **changes):Добавлено в Python 3.13.
Функция copy.replace() создает новый объект того же типа, что и obj, заменяя поля значениями из changes, что особенно полезно для неизменяемых объектов. Он поддерживает именованные кортежи, созданные с помощью фабричных функций collections.namedtuple(), экземпляры dataclass, различные объекты datetime, объекты сигнатур, объекты параметров, объект кода и любые пользовательские классы, которые определяют метод object.__replace__(self, /, **changes), который должен создать новый объект того же типа, заменив поля значениями из changes.
copy.error:Исключение copy.error возбуждается для специфических ошибок модуля.
copy.Разница между мелким и глубоким копированием актуальна только для составных объектов, содержащих другие объекты, например списки или экземпляры классов:
При операциях глубокого копирования часто возникают две проблемы, которых нет при операциях поверхностного копирования:
Функция copy.deepcopy() позволяет избежать этих проблем:
Модуль copy не копирует такие типы, как модуль, метод, трассировка стека, кадр стека, файл, сокет, окно, массив или любые подобные типы. Он “копирует" функции и классы (неглубоко и глубоко), возвращая исходный объект без изменений, что совместимо с тем, как они обрабатываются модулем pickle.
Неглубокие копии словарей можно сделать с помощью метода dict.copy(), а списков - назначив срез всего списка, например copied_list = original_list[:].
Классы могут использовать те же интерфейсы для управления копированием, которые они используют для управления процессом pickleing. Смотрите описание модуля pickle для получения информации об этих методах. Фактически, модуль копирования использует зарегистрированные функции pickle из модуля copyreg.
Чтобы класс мог определить свою собственную реализацию копии, он может определять специальные методы __copy__() и __deepcopy__().
Если реализации __deepcopy__() необходимо сделать глубокую копию компонента, она должна вызвать функцию copy.deepcopy() с компонентом в качестве первого аргумента и memo-словарем в качестве второго аргумента.
Функция copy.replace() более ограничена, чем copy.copy() и copy.deepcopy(), и поддерживает только именованные кортежи, созданные collections.namedtuple(), классы данных и другие классы, которые определяют метод obj.__replace__().
Метод object.__replace__(self, /, **changes) должен создать новый объект того же типа, заменив поля значениями из changes.