Когда вы указываете a
слева от =
оператора, вы используете обычное присвоение Python , которое изменяет имя a
в текущем контексте, чтобы указать на новое значение. Это не меняет предыдущее значение, на котороеa
указывалось.
Указывая a[0:2]
слева от =
оператора, вы сообщаете Python, что хотите использовать Slice Assignment . Назначение фрагментов - это специальный синтаксис для списков, в котором вы можете вставлять, удалять или заменять содержимое из списка:
Вставка :
>>> a = [1, 2, 3]
>>> a[0:0] = [-3, -2, -1, 0]
>>> a
[-3, -2, -1, 0, 1, 2, 3]
Удаление :
>>> a
[-3, -2, -1, 0, 1, 2, 3]
>>> a[2:4] = []
>>> a
[-3, -2, 1, 2, 3]
Замена :
>>> a
[-3, -2, 1, 2, 3]
>>> a[:] = [1, 2, 3]
>>> a
[1, 2, 3]
Примечание:
Длина среза может отличаться от длины назначенной последовательности, таким образом изменяя длину целевой последовательности, если целевая последовательность позволяет это. - источник
Функция Slice Assignment аналогична функции Tuple Unpacking . Например, a[0:1] = [4, 5]
эквивалентно:
# Tuple Unpacking
a[0], a[1] = [4, 5]
С помощью распаковки кортежей вы можете изменять непоследовательные списки:
>>> a
[4, 5, 3]
>>> a[-1], a[0] = [7, 3]
>>> a
[3, 5, 7]
Однако распаковка кортежа ограничивается заменой, так как вы не можете вставлять или удалять элементы.
До и после всех этих операций a
- один и тот же точный список. Python просто предоставляет хороший синтаксический сахар для изменения списка на месте.