<p>Python变量保存对<em>值</em>的引用。因此,当您定义<code>palin</code>列表时,您将传入由<code>polly</code>引用的值,而不是变量本身。</p>
<p>您应该将值想象为气球,将变量作为线程绑定到这些气球。<code>"alive"</code>是气球,<code>polly</code>只是气球的一个线程,<code>palin</code>列表有一个不同的</em>线程绑定到同一个气球。在python中,列表只是一系列线程,所有线程都从0开始编号。</p>
<p>接下来要做的是将<code>polly</code>字符串绑定到一个新的气球<code>"dead"</code>,但是列表仍然保留绑定到<code>"alive"</code>气球的旧线程。</p>
<p>您可以将该线程替换为列表中的<code>"alive"</code>,方法是按索引重新分配列表以引用每个线程;在您的示例中,即线程<code>1</code>:</p>
<pre><code>>>> palin[1] = polly
>>> palin
['parrot', 'dead']
</code></pre>
<p>在这里,我只是将<code>palin[1]</code>线程绑定到<code>polly</code>绑定到的同一个对象上,不管是什么。</p>
<p>请注意,python中的任何集合,例如<code>dict</code>、<code>set</code>、<code>tuple</code>等,也只是线程的集合。其中一些线程可以换成不同的线程,比如列表和dict,这就是python中的“可变”的原因。</p>
<p>另一方面,字符串是不可变的。一旦定义了像<code>"dead"</code>或<code>"alive"</code>这样的字符串,它就是<em>one</em>气球。你可以用一个线程(一个变量,一个列表,或者其他什么)来约束它,但是你不能替换其中的字母。您只能将该线程绑定到一个完全<em>的新</em>字符串。</p>
<p>python中的大多数东西都可以像气球一样工作。整数、字符串、列表、函数、实例、类,都可以绑定到变量或绑定到容器中。</p>
<p>你可能也想读<a href="http://nedbatchelder.com/text/names.html" rel="noreferrer">Ned Batchelder's treatise on Python names</a>。</p>