Списковое выражение сразу создаёт список, генераторное выдаёт элементы лениво. copy() копирует внешний контейнер, а deepcopy() рекурсивно копирует поддерживаемые вложенные объекты.
Списки, генераторы и копирование вложенных объектов
Списковое выражение сразу создаёт список, генераторное выдаёт элементы лениво. copy() копирует внешний контейнер, а deepcopy() рекурсивно копирует поддерживаемые вложенные объекты.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
[x for x in y] от (x for x in y)
Отличие copy() от deepcopy()
Ответ
Списковое выражение сразу создаёт список, генераторное выдаёт элементы лениво. copy() копирует внешний контейнер, а deepcopy() рекурсивно копирует поддерживаемые вложенные объекты.
У списка есть индексирование и повторные обходы, генератор потребляется по мере чтения и обычно один раз. Поверхностная копия вложенного списка всё ещё ссылается на те же внутренние списки. Deepcopy использует memo для повторных ссылок и циклов, но не превращает любой ресурс вроде открытого сокета в независимую копию. Выбор зависит от того, нужна ли новая структура или просто иной способ обхода.