擅长:python、mysql、java
<p>迭代列表时,依次生成每个元素。然而,有不同种类的物体。<em>可变</em>和<em>不可变</em>。当你做如下事情时:</p>
<pre><code>a += 1
</code></pre>
<p>对于一个不可变的对象,它大致可以翻译为:</p>
^{pr2}$
<p>现在在本例中,通过<code>a</code>获取对象引用,向其添加1以创建一个<strong>新对象</strong>。然后为这个新对象指定名称<code>a</code>。请注意,如果我们在迭代时这样做,我们根本不会接触列表——我们只会不断地创建新对象并将它们分配给名称<code>a</code>。在</p>
<p>对于可变的<em>对象,这是不同的。然后<code>a += 1</code>实际上改变了对象的位置。因此,列表将看到更改,因为它所持有的对象已更改(更改)。(对于不可变对象,列表中包含的对象没有更改,因为它不能更改)。有关详细信息,请参见<a href="https://stackoverflow.com/questions/15376509/when-is-i-x-different-from-i-i-x-in-python">this question</a>。在</p>
<p>这也让我们更清楚地了解了当您按索引迭代时发生了什么。你构造了一个新的整数,然后把它放在列表中(忘记之前在那个槽里的东西)。在</p>