Вопрос №35
Осталось:
Чем отличается глубокое копирование от поверхностного?
Образцовый ответ
Показывать ответ по умолчанию
Поверхностное копирование:
Создаёт новый объект, но вложенные объекты не копируются — сохраняются ссылки на оригиналы:
import copy original = [[1, 2, 3], [4, 5, 6]] shallow = copy.copy(original) shallow[0][0] = 999 print(original[0][0]) # 999 — изменился и оригинал!
Глубокое копирование:
Создаёт полностью независимую копию, включая все вложенные объекты:
import copy original = [[1, 2, 3], [4, 5, 6]] deep = copy.deepcopy(original) deep[0][0] = 999 print(original[0][0]) # 1 — оригинал не изменился
Способы поверхностного копирования:
# Для списков lst = [1, 2, 3] copy1 = lst.copy() copy2 = lst[:] copy3 = list(lst) # Для словарей d = {"a": 1} copy4 = d.copy() copy5 = dict(d) # Универсальный import copy copy6 = copy.copy(lst)
Когда что использовать:
- Поверхностное — когда коллекция содержит только неизменяемые элементы (числа, строки).
- Глубокое — когда есть вложенные изменяемые объекты (списки в списках, словари в списках).
# Поверхностного достаточно nums = [1, 2, 3] # Элементы — неизменяемые int safe_copy = nums.copy() # Нужно глубокое matrix = [[1, 2], [3, 4]] # Вложенные списки safe_copy = copy.deepcopy(matrix)
