TGViewer
Zen of Python Zen of Python @zen_of_python · 18.9K subscribers
Post #4958 1.58K
deepcopy копирует всё, до чего дотянется, включая то, что вы копировать не собирались

Знакомая поломка: конфиг сложили в словарь, сделали copy.copy, поправили вложенный список в клоне и увидели правку в оригинале. Новый контейнер получает те же ссылки на вложенные объекты.

copy.deepcopy идёт по графу рекурсивно и ведёт словарь memo: каждый скопированный объект запоминается по id. Циклическая ссылка поэтому не уводит копирование в бесконечность, а два поля, смотревшие на один список, в копии тоже смотрят на один. Плата — обход всего графа: объект, который держит открытый сокет или пул соединений, deepcopy либо уронит, либо утащит за собой пол-приложения.

Поведение настраивается методами __copy__ и __deepcopy__: класс сам решает, что воспроизвести заново, а что отдать по ссылке.

Разбор поверхностной и глубокой копии — в статье на dev.to.

#python
  • ❤ 3
More from @zen_of_python
  1. Sep 20, 2026Как collections.deque хранит элементы блоками У deque два конца, поэтому легко представить…
  2. Sep 20, 2026Что ускоряет django-msgspec в Django и где он расходится с json django-msgspec заменяет ко…
  3. Sep 20, 2026Почему миллион чисел в Python занимает 35 МБ Список из миллиона целых, которые помещаются…
  4. Sep 19, 2026Как перевести Python-сервер MCP с FastMCP на SDK 2.x Свежая установка зависимостей сломала…
  5. Sep 19, 2026Как кэшировать методы чужого Python-клиента Если библиотечный клиент нельзя менять, его ме…
  6. Sep 19, 2026Где заканчивается ускорение NumPy и что выбрать дальше Векторизация выполняет цикл низкоур…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →