Python - нельзя так просто взять и переписать объект



Python Python, ты могуч. Ты даже без ";" всё понимаешь. Но, просто так переписать объект ты не можешь. Лично мне, как любителю, это не понятно. Но ничего, с этим мы тоже разберёмся.

Возьмём пример с картинки. Как же так? Внесли изменения в list_1 а оно подействовало на list_2 тоже. Проверим id объекта:
list_1 = [0, 1, 2] list_2 = list_1 print(id(list_1)) # 2393635697152 print(id(list_2)) # 2393635697152

Ну вот, в очередной раз убеждаемся, что в Python-e нет переменных. Есть только объекты на которые ссылаются разные имена. В данном случае два разных имени ссылаются на один объект.

Но, что же делать если нам надо этот объект именно скопировать? Так, что-бы у него был свой id?

Для этого надо использовать модуль copy. К счастью он сразу идёт с Python и работает из коробки... без шаманства:
import copy list_1 = [0, 1, 2] list_2 = copy.copy(list_1) print(id(list_1)) # 1637554467328 print(id(list_2)) # 1637554460608

Всё бобёр - выдыхай. Работает!!

Да, есть еще метод deepcopy, есть отдельные методы для копирования  листов и словарей без использования модуля copy. Но, лично мне этого, пока, достаточно. А дальше - больше.

Более подробно о модуле copy (включая сам copy и deepcopy).

Всем удачи!!

Комментариев нет:

Отправить комментарий