擅长:python、mysql、java
<p>通过检查内存中引用的对象,可以更好地理解这一点。让我们使用<a href="https://docs.python.org/2/library/functions.html#id" rel="nofollow">^{<cd1>} for the inspection</a></p>
<p>在第一种情况下:</p>
<pre><code>>>> l = [1,2,3,4]
>>> id(l)
4497052232
>>> m = l
>>> id(m)
4497052232
>>> l = l + [5,6]
>>> id(l)
4497052448
>>> print l, id(l), m, id(m)
[1, 2, 3, 4, 5, 6] 4497052448 [1, 2, 3, 4] 4497052232
>>>
</code></pre>
<p>请注意,<code>l = l + [5,6]</code>在内存中创建了一个新对象,并且<code>l</code>引用了该对象。你知道吗</p>
<p>在第二种情况下:</p>
<pre><code>>>> l = [1,2,3,4]
>>> id(l)
4497052520
>>> m = l
>>> id(m)
4497052520
>>> l += [5,6]
>>> id(l)
4497052520
>>> print l, id(l), m, id(m)
[1, 2, 3, 4, 5, 6] 4497052520 [1, 2, 3, 4, 5, 6] 4497052520
>>>
</code></pre>
<p><code>l += [5,6]</code>对内存中同一对象的引用。结果就是这样。
所以,基本上<code>+=</code>相当于inplaceadd。。<a href="https://docs.python.org/2/library/operator.html#operator.__iadd__" rel="nofollow">More on this can be read here</a></p>