Sobes.tech
Назад к вопросам
Junior — Middle
57

В чем разница между созданием полной копии объекта и копированием его ссылок на внутренние объекты?

Компании, где спрашивали
Леста

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:
Разница в том, что при создании полной копии объекта создаётся новый объект со всеми вложенными объектами, а при копировании ссылок на внутренние объекты создаётся новый внешний объект, но внутренние объекты остаются общими. Это влияет на изменение данных и управление памятью.

Определение:
Полная копия объекта (глубокое копирование) создаёт новый объект и рекурсивно копирует все вложенные объекты, тогда как поверхностное копирование создаёт новый внешний объект, но внутренние объекты остаются теми же, то есть копируются только ссылки на них.

Пример использования:

import copy

original = [1, [2, 3], 4]

shallow_copy = copy.copy(original)
deep_copy = copy.deepcopy(original)

shallow_copy[1][0] = 'changed'
print(original)      # [1, ['changed', 3], 4]
print(deep_copy)     # [1, [2, 3], 4]

Пояснение кода:
В примере создаётся список с вложенным списком. При поверхностном копировании shallow_copy копируется только внешний список, а вложенный список остаётся общим. Изменение вложенного списка в shallow_copy отражается в original. При глубоком копировании deep_copy создаётся полностью независимая копия, и изменения в shallow_copy не влияют на неё.

Ключевые моменты:

  • Поверхностное копирование копирует только верхний уровень объекта.
  • Глубокое копирование рекурсивно копирует все вложенные объекты.
  • Изменения во вложенных объектах поверхностной копии влияют на оригинал.
  • Глубокое копирование требует больше ресурсов и времени.
  • В Python для копирования используют модуль copy с функциями copy() и deepcopy().