Переменные Python содержат ссылки на значения . Таким образом, когда вы определяете список palin
, вы передаете значение, на которое ссылается polly
, а не сама переменная.
Вы должны представлять значения как воздушные шары, при этом переменными являются потоки, привязанные к этим воздушным шарам. "alive"
- это воздушный шар, polly
- это просто поток этого воздушного шара, а в списке palin
есть другой поток, привязанный к тому же воздушному шару. В python список - это просто серия потоков, все номера которых начинаются с 0.
. Что вы делаете дальше, привяжите строку polly
к новому шару "dead"
, но список все еще держится на старую нить, привязанную к воздушному шару "alive"
.
Вы можете заменить этот поток на "alive"
, удерживаемый списком, переназначив список по индексу для обращения к каждому потоку; в вашем примере это поток 1
:
>>> palin[1] = polly
>>> palin
['parrot', 'dead']
Здесь я просто привязал поток palin[1]
к тому же, к чему polly
привязан, что бы это ни было.
Обратите внимание, что любая коллекция в python, такая как dict
, set
, tuple
и т. Д. - это просто коллекции потоков. Некоторые из них могут обмениваться потоками для разных потоков, таких как списки и dicts, и это то, что делает что-то в python «изменчивым».
С другой стороны, строки not изменяемы. Как только вы определяете строку типа "dead"
или "alive"
, это один шар. Вы можете связать его потоком (переменная, список или что-то еще), но вы не можете заменить буквы внутри него. Вы можете связать этот поток только с полной новой строкой.
Большинство вещей в python могут действовать как воздушные шары. Цели, строки, списки, функции, экземпляры, классы, все могут быть привязаны к переменной или привязаны к контейнеру.
Возможно, вы захотите прочитать трактат Ned Batchelder о именах Python .