Python Glossary English

все 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Сообщить о неточности