Ссылки
Как в питоне работают обращения по ссылкам, что происходит в случаях присваивания, copy, deepcopy?
В Python переменные представляют собой ссылки на объекты. Когда вы присваиваете значение переменной, вы фактически создаете ссылку на объект в памяти, а не копируете сам объект. Рассмотрим, как это работает на примере:
a = [1, 2, 3]
b = a
В этом случае b становится ссылкой на тот же объект, на который ссылается a. Оба имени (a и b) указывают на один и тот же объект [1, 2, 3].
Присваивание копии объекта выполняется с помощью методов copy() и deepcopy():
1. copy():
a = [1, 2, 3]
b = a.copy()
Этот метод создает поверхностную копию объекта. Это означает, что он создает новый объект, который содержит ссылки на те же объекты, что и исходный объект (если он является контейнером, таким как список). Поэтому изменения вложенных объектов будут отражаться как в копии, так и в исходном объекте.
2. deepcopy():
import copy
a = [[1, 2], [3, 4]]
b = copy.deepcopy(a)
Этот метод создает полную копию объекта. Он рекурсивно копирует все вложенные объекты, создавая новые объекты для каждого из них. Таким образом, изменения в копии не будут влиять на исходный объект, и наоборот.
Поэтому, когда вы работаете с объектами в Python, важно понимать, что присваивание переменной не копирует сам объект, а только создает ссылку на него. Если вам нужна копия объекта, используйте методы copy() или deepcopy().