Привет! Не могу разобраться как работает оператор [:]. Я знаю что он делает копию списка и возвращает ее, при этом записывает данные уже в другую ячейку памяти.
a = [1, 2, 3, 4, 5]
b = a
a = [1, 2, 3]
print(a, b)
В коде переменная "a" поменяет значение, "b" останется прежней, так как до сих ссылается на первый список. Про сслыки вместо переменных я читал. Но вот например в следующем коде:
a = [1, 2, 3, 4, 5]
b = a
a[:] = [4, 5 ,6 ,7 ,8 , 9]
print(a, b)
#a и b равны [4, 5 ,6 ,7 ,8 , 9]
Не понимаю механику, ведь мы срезом просто берем копию списка, как переменная "b" начала ссылаться на новый список?
Я взял id() от переменных:
a = [1, 2, 3, 4, 5]
b = a
print(id(a))#140686224235392 до объявления среза
a[:] = [4, 5 ,6 ,7 ,8 , 9]
print(id(a[:]))#140695459003648 адрес копии списка
print(id(a), id(b))#140683718712192 140683718712192 адреса не поменялись
Адрес переменной 'a' остается неизменным после взятия среза a[:] и присваиванию ему нового значения, однако id() самого среза другой. Не могу понять как мы присвоив копии списка a[:] новое значение, поменяли объект на который ссылаются переменные a и b. Подскажите в чем магия? :)