当您这样做时,L1.append(elemento)
您正在调用一个实际更改由变量命名的列表的方法L1
。L1
所有其他设置和值的命令L2
实际上只是为新变量创建新名称。
这个版本没有改变任何东西:
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
虽然这个:
def altera(L1, L2):
for elemento in L2:
# Call method on L1 that changes it
L1.append(elemento)
# Call method on L2 that changes it
L2.append(4)
# Change object pointed to by name L1 -- Lista1
L1[-1] = 10
# Change object pointed to by name L2 -- Lista2
del L2[0]
return L2[:]
Lista1 = [1,2,3]
Lista2 = [1,2,3]
Lista3 = altera(Lista1, Lista2)
print Lista1
print Lista2
print Lista3
但是,有一个棘手的问题L += [2]
与L = L + 2
. 增强赋值语句的Python 语言参考部分解释了不同之处:
像 x += 1 这样的扩充赋值表达式可以重写为 x = x + 1 以实现类似但不完全相等的效果。在增强版本中,x 只被评估一次。此外,如果可能,实际操作会在原地执行,这意味着不是创建新对象并将其分配给目标,而是修改旧对象。”</p>