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