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 подскажет развёрнутый ответ в реальном времени.