Mediumcopy

Чем deepcopy отличается от copy?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

copy.copy(obj) — shallow copy: новый объект, но элементы — ссылки на те же. copy.deepcopy(obj) — глубокая копия: рекурсивно копирует все вложенные объекты.

import copy

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

shallow = copy.copy(original)
shallow[0].append(99)
print(original[0])   # [1, 2, 99] — внутренний list разделяется!

deep = copy.deepcopy(original)
deep[0].append(100)
print(original[0])   # [1, 2] — независимо
  • Для immutable (int, str) copy возвращает тот же объект (незачем копировать);
  • list.copy(), dict.copy(), arr[:], list(arr) — shallow;
  • deepcopy медленнее (рекурсивный обход), но handle'ит циклические ссылки через memo;
  • __copy__/__deepcopy__(memo) — кастомизация для своих класс.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.