В Python присваивание и копирование работают совсем по-разному при работе с объектами.
Когда ты пишешь b = a, ты не создаёшь новый объект. Вместо этого обе переменные указывают на один и тот же объект в памяти.
a = [1, 2, 3]
b = a
b.append(4)
print(a) # [1, 2, 3, 4] — a тоже изменился!
Любое изменение, сделанное через b, также повлияет на a, потому что они ссылаются на один и тот же объект.
Метод copy() создаёт новый, независимый объект с тем же содержимым — это называется поверхностное копирование.
a = [1, 2, 3]
b = a.copy()
b.append(4)
print(a) # [1, 2, 3] — a не изменился
copy() — это поверхностное копирование, то есть вложенные объекты по-прежнему разделяются по ссылке.
Чтобы полностью изолировать вложенные структуры, используй deepcopy() из модуля copy:
from copy import deepcopy
b = deepcopy(a)
b = a → один и тот же объект, общая ссылкаb = a.copy() → новый объект, поверхностное копированиеb = deepcopy(a) → новый объект, полностью независимыйКогда ты используешь прямое присваивание как b = a со списком, обе переменные указывают на один и тот же объект в памяти, поэтому изменение b повлияет на a.
Новый — ещё не проверен сообществом
Вы