擅长:python、mysql、java
<p>我称之为包含对象的“不变性”。在</p>
<p>我想你可以把你的情况和下面的情况比较一下:</p>
<pre><code>x = []
l = [x]
x += [1]
print l # --> [[1]]
</code></pre>
<p>区别在于:</p>
<p>在这种情况下(可变的情况),您可以对列表<code>l</code>中包含的原始对象<code>x</code>进行变异。在</p>
<p>但是,在您的情况下,<code>x</code>指向一个不可变的对象(<code>5</code>),然后将其添加到列表中。{{cd5>之后不仅仅是对这个列表的引用。在</p>
<p>因此<code>x += <something></code>要么修改<code>x</code>,要么根据对象类型的性质用另一个对象替换它。在</p>
<hr/>
<p>编辑:这也与列表的性质无关。你可以用两个变量实现同样的效果:</p>
^{pr2}$
<p>对比</p>
<pre><code>x = []
y = x
print x, y, x is y
x += [1]
print x, y, x is y
</code></pre>
<p>由于<code>int</code>的不变性,第一个将改变<code>x</code>,导致<code>x is y</code>为false;而在第二个示例中,<code>x is y</code>保持为真,因为对象(列表)发生了变化,<code>x</code>和{<cd14>}引用的对象的标识保持不变。在</p>