copy.md
1> **Источник:** https://python-all.ru/2.7/library/copy.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 8.17. [`copy`](https://python-all.ru/2.7/library/copy.html#module-copy) – Операции поверхностного и глубокого копирования89Операторы присваивания в Python не копируют объекты, они создают привязки между целью и объектом. Для изменяемых коллекций или коллекций, содержащих изменяемые элементы, иногда требуется копия, чтобы можно было изменить одну копию, не меняя другую. Этот модуль предоставляет общие операции поверхностного и глубокого копирования (объяснены ниже).1011Краткое описание интерфейса:1213#### `copy.copy(x)`1415Возвращает поверхностную копию *x*.1617#### `copy.deepcopy(x)`1819Возвращает глубокую копию *x*.2021#### `exception copy.error`2223Возбуждается при ошибках, специфичных для модуля.2425Разница между поверхностным и глубоким копированием актуальна только для составных объектов (объектов, содержащих другие объекты, например, списки или экземпляры классов):2627- *Поверхностная копия* создаёт новый составной объект, а затем (насколько это возможно) вставляет в него *ссылки* на объекты, найденные в оригинале.28- *Глубокая копия* создаёт новый составной объект, а затем рекурсивно вставляет в него *копии* объектов из оригинала.2930Две проблемы, часто возникающие при глубоком копировании, которых нет при поверхностном:3132- Рекурсивные объекты (составные объекты, прямо или косвенно содержащие ссылку на себя) могут вызвать рекурсивный цикл.33- Поскольку глубокое копирование копирует всё, оно может скопировать лишнее, например, данные, предназначенные для совместного использования между копиями.3435Функция [`deepcopy()`](https://python-all.ru/2.7/library/copy.html#copy.deepcopy) позволяет избежать этих проблем за счёт:3637- хранение словаря “memo”, содержащего объекты, уже скопированные в текущем проходе копирования; и38- предоставления пользовательским классам возможности переопределить операцию копирования или набор копируемых компонентов.3940Этот модуль не копирует типы, такие как модуль, метод, трассировка стека, кадр стека, файл, сокет, окно, массив или любые подобные типы. Он «копирует» функции и классы (поверхностно и глубоко), возвращая исходный объект без изменений; это совместимо с тем, как они обрабатываются модулем [`pickle`](https://python-all.ru/2.7/library/pickle.html#module-pickle).4142Поверхностные копии словарей можно создать с помощью [`dict.copy()`](https://python-all.ru/2.7/library/stdtypes.html#dict.copy), а\\nсписков – присваиванием среза всего списка, например,\\n`copied_list = original_list[:]`.4344Изменено в версии 2.5: добавлены функции копирования.4546Классы могут использовать те же интерфейсы для управления копированием, что и для управления пиклингом. Смотрите описание модуля [`pickle`](https://python-all.ru/2.7/library/pickle.html#module-pickle) для информации об этих методах. Модуль [`copy`](https://python-all.ru/2.7/library/copy.html#module-copy) не использует модуль регистрации [`copy_reg`](https://python-all.ru/2.7/library/copy_reg.html#module-copy_reg).4748Чтобы класс мог определить собственную реализацию копирования, он может определить специальные методы `__copy__()` и `__deepcopy__()`. Первый вызывается для реализации операции поверхностного копирования; дополнительные аргументы не передаются. Второй вызывается для реализации операции глубокого копирования; ему передаётся один аргумент – словарь memo. Если реализация `__deepcopy__()` требует создания глубокой копии компонента, она должна вызвать функцию [`deepcopy()`](https://python-all.ru/2.7/library/copy.html#copy.deepcopy), передав компонент первым аргументом, а словарь memo – вторым.4950> **См. также**51>52> **Модуль [`pickle`](https://python-all.ru/2.7/library/pickle.html#module-pickle)**53>54> Обсуждение специальных методов, используемых для поддержки извлечения и восстановления состояния объекта.55