deepcopy использует memo — таблицу уже обработанных исходных объектов и их копий. Благодаря этому цикл не копируется бесконечно, а обратная ссылка указывает на уже созданную копию.
Как происходит глубокое копирование (`deepcopy`) объекта с циклическими ссылками: например, у объекта «человек» есть ссылка на супругу, а у супруги — обратная ссылка на мужа?
deepcopy использует memo — таблицу уже обработанных исходных объектов и их копий. Благодаря этому цикл не копируется бесконечно, а обратная ссылка указывает на уже созданную копию.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
deepcopy использует memo — таблицу уже обработанных исходных объектов и их копий. Благодаря этому цикл не копируется бесконечно, а обратная ссылка указывает на уже созданную копию.
Если у человека есть супруг, ссылающийся обратно, после копирования обычных поддерживаемых объектов получится отдельная связанная пара, а не бесконечная цепочка. Разделяемые ссылки внутри исходного графа обычно сохраняют разделяемость в копии. Пользовательский deepcopy должен корректно работать с переданным memo. Специальные ресурсы и собственные правила копирования могут иметь ограничения.
Источник: docs.python.org.