<p>当您执行<code>L1.append(elemento)</code>时,您正在调用一个方法,该方法实际上更改了由变量<code>L1</code>命名的列表。其他所有设置<code>L1</code>和<code>L2</code>值的命令实际上只是为新变量创建新名称。在</p>
<p>此版本不会更改任何内容:</p>
<pre><code>def altera(L1, L2):
for elemento in L2:
# create a new list and assign name L1
L1 = L1 + [elemento]
# create a new list and assign name L2
L2 = L2 + [4]
return L2
Lista1 = [1,2,3]
Lista2 = [1,2,3]
Lista3 = altera(Lista1, Lista2)
print Lista1
print Lista2
print Lista3
</code></pre>
<p>而这一次:</p>
^{pr2}$
<p>但是<code>L += [2]</code>有一个棘手的问题,它与<code>L = L + 2</code>不完全相同。关于扩充赋值语句的<a href="http://docs.python.org/2/reference/simple_stmts.html#augmented-assignment-statements" rel="nofollow">Python Language Reference</a>部分解释了这一区别:</p>
<blockquote>
<p>An augmented assignment expression like x += 1 can be rewritten as x = x + 1 to achieve a similar, but not exactly equal effect. In the augmented version, x is only evaluated once. Also, when possible, the actual operation is performed in-place, meaning that rather than creating a new object and assigning that to the target, the old object is modified instead.”</p>
</blockquote>