При работе с Python, важно понимать, как работают копии. Существуют два типа копий: поверхностные (shallow) и глубокие (deep). Поверхностная копия создает новую коллекцию с ссылками на элементы оригинала, в то время как глубокая копия создает новую коллекцию и рекурсивно копирует все элементы оригинала.
Встретимся со следующей ситуацией. Допустим, есть словарь, и нужно создать его копию и добавить новый элемент в эту копию. Затем ожидается, что этот новый элемент появится и в оригинальном словаре. Но на самом деле это не происходит.
original = dict(a=1, b=2) new = original.copy() new.update({'c': 3})
После выполнения этого кода, в словаре new
будет три элемента: 'a': 1
, 'b': 2
, 'c': 3
, а в original
— только два: 'a': 1
, 'b': 2
.
Это происходит потому, что метод dict.copy()
создает поверхностную копию словаря. Поверхностная копия означает, что создается новый словарь, и в этот новый словарь копируются ссылки на объекты из оригинального словаря. Поэтому, когда в копию добавляется новый элемент, он добавляется только в копию, а не в оригинал, поскольку копия и оригинал — это два разных объекта.
То есть, суть поверхностной копии в том, что она копирует только структуру данных, но не копирует сами данные. Это означает, что если изменить копию, оригинал останется без изменений.
Таким образом, для изменения копии и оригинала одновременно, необходимо использовать глубокую копию. Но в случае со словарями Python, глубокая копия не поддерживается напрямую, и для ее создания следует использовать модуль copy
:
import copy original = dict(a=1, b=2) new = copy.deepcopy(original) new.update({'c': 3})
Добавить комментарий