Как происходит глубокое копирование (`deepcopy`) объекта с циклическими ссылками: например, у объекта «человек» есть ссылка на супругу, а у супруги — обратная ссылка на мужа?

deepcopy использует memo — таблицу уже обработанных исходных объектов и их копий. Благодаря этому цикл не копируется бесконечно, а обратная ссылка указывает на уже созданную копию.

Короткий ответ

Что ответить на собеседовании

deepcopy использует memo — таблицу уже обработанных исходных объектов и их копий. Благодаря этому цикл не копируется бесконечно, а обратная ссылка указывает на уже созданную копию.

Подробный разбор

Ответ с пояснениями

deepcopy использует memo — таблицу уже обработанных исходных объектов и их копий. Благодаря этому цикл не копируется бесконечно, а обратная ссылка указывает на уже созданную копию.

Если у человека есть супруг, ссылающийся обратно, после копирования обычных поддерживаемых объектов получится отдельная связанная пара, а не бесконечная цепочка. Разделяемые ссылки внутри исходного графа обычно сохраняют разделяемость в копии. Пользовательский deepcopy должен корректно работать с переданным memo. Специальные ресурсы и собственные правила копирования могут иметь ограничения.

Источник: docs.python.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее