deepcopy обходит граф объектов и создаёт копии вложенных изменяемых частей. Словарь memo связывает уже посещённые объекты с копиями, предотвращая бесконечный обход циклов и сохраняя общие ссылки.
Что такое глубокое копирование объектов (copy.deepcopy) в Python с точки зрения производительности? Как этот механизм обходит циклические ссылки, почему он критически медленно работает на больших графах объектов и какими альтернативными паттернами его заменяют в highload-системах?
deepcopy обходит граф объектов и создаёт копии вложенных изменяемых частей. Словарь memo связывает уже посещённые объекты с копиями, предотвращая бесконечный обход циклов и сохраняя общие ссылки.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
deepcopy обходит граф объектов и создаёт копии вложенных изменяемых частей. Словарь memo связывает уже посещённые объекты с копиями, предотвращая бесконечный обход циклов и сохраняя общие ссылки.
Стоимость растёт с числом посещённых объектов, связей, объёмом данных и пользовательскими методами копирования; универсального постоянного времени нет. Неизменяемые объекты могут переиспользоваться. В нагруженном коде часто копируют только изменяемую ветвь, используют неизменяемые структуры или явно строят нужный DTO. Это требует понимания владения: поверхностная копия быстрее, но оставляет общие вложенные объекты. Сначала измерьте, что именно копируется и зачем.