С одной стороны, согласно ответу на вопрос «Переполнение стека» здесь, оператор среза создает (глубокую) копию списка или части списка, то есть новый список. Ссылка может быть старой (раньше, чем Python 3.4.x), но я только что подтвердил это поведение с помощью следующего простого эксперимента с Python 3.4.2:
Код: Выделить всё
words = ['cat', 'window', 'defenestrate']
newList = words[:] # new objects are created; a.k.a. deep copy
newList[0] = 'dog'
print(words) # ['cat' ...
print(newList) # ['dog' ...
Код: Выделить всё
Assignment to slices is also possible, and this can even change the size of the list or clear it entirely:
>>>
>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> # replace some values
>>> letters[2:5] = ['C', 'D', 'E']
>>> letters
['a', 'b', 'C', 'D', 'E', 'f', 'g']
>>> # now remove them
>>> letters[2:5] = []
>>> letters
['a', 'b', 'f', 'g']
>>> # clear the list by replacing all the elements with an empty list
>>> letters[:] = []
>>> letters
[]
Из наблюдения следует, что оператор среза ведет себя по-разному, когда он находится слева/справа по отношению к оператору присваивания. Я не знаю ни одного языка, на котором оператор мог бы произвести подобное поведение. В конце концов, оператор — это функция, просто синтаксически специальная функция, и поведение функции должно быть самодостаточным, полностью определяемым всеми ее входными данными.
Так что же может оправдать это «специальное правило» в философии дизайна Python?
P.S. Если мой вывод неверен, то на самом деле есть только две возможности:
1. «Оператор» нарезки Python на самом деле не является оператором, поэтому мое предположение не выполняется --- тогда что это такое («оператор нарезки» [:])?
2. Разница в поведении вызвана каким-то скрытым, не наблюдаемым фактором. Местоположение оператора среза (левая/правая сторона) относительно оператора присваивания случайно сосуществует с наблюдением различного поведения. У них нет причинно-следственной связи --- тогда какой же скрытый фактор вызывает разницу в поведении?