все Python 3copyфункция
copy.deepcopy()
глубокая
Создаёт полностью независимую глубокую копию объекта: все вложенные объекты тоже копируются. В отличие от list.copy() (поверхностная копия), изменение вложенных элементов не влияет на оригинал.
Синтаксис
import copy
copy.deepcopy(obj, memo=None)
Внутри ведётся словарь memo, поэтому циклические ссылки не зацикливаются, а объект, на который в структуре два разных пути, останется одним общим объектом и в копии. Копируется не всё: функции и классы возвращаются как есть, а модули, файлы, сокеты и потоки скопировать нельзя вовсе — deepcopy поднимает TypeError, так что объект с открытым соединением без своего __deepcopy__ глубоко не скопировать. Рекурсивный обход дорог, и если структура состоит из простых данных, собрать её заново (или прогнать через json) часто быстрее.
Примеры
import copy
a = [[1, 2], [3, 4]]
b = a.copy(); b[0][0] = 99
print(a) # → [[99, 2], [3, 4]] (поверхностная: оригинал изменился)
a = [[1, 2], [3, 4]]
c = copy.deepcopy(a); c[0][0] = 99
print(a) # → [[1, 2], [3, 4]] (глубокая: оригинал не тронут)
print(c) # → [[99, 2], [3, 4]]
print(a is c) # → False
d = {'x': {'y': 1}}
d2 = copy.deepcopy(d)
print(d2['x'] is d['x']) # → False (вложенный dict тоже скопирован)
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности