Подумайте об этом так: срез должен быть другим объектом, копией оригинала:
In [15]: la=[1,2,3]
In [16]: la[:2]
Out[16]: [1, 2]
In [17]: la=[1,2,3]
In [18]: lb=la[:2]
In [19]: lb[0] = 5
In [20]: lb
Out[20]: [5, 2]
In [21]: la
Out[21]: [1, 2, 3]
la[:]
- это срез, хотя в этой форме это срез, который возвращает весь список.
Однако срез работает так же, как и с кортежем, который является неизменяемым типом:
In [22]: ta=(1,2,3)
In [23]: ta[:2]
Out[23]: (1, 2)
et c.
Отличие от список, что вы не можете сделать ta[0] = 5
. Это делает кортеж неизменным, а список изменяемым.
Присваивание la
или ta
не приводит к изменению какого-либо объекта, это только имена (псевдонимы) объектов:
ta=[1,2,3]
ta=4
Второе назначение не изменило список, оно изменило имя ta
для ссылки на целое число 4
. Список [1,2,3]
, если на него нет других ссылок, будет собирать и уничтожать мусор.