函数无意中修改了外部变量



这看起来非常基本,但由于某种原因,我的列表在调用函数时被修改,即使我从未改变它的值。

我想创建一个值加倍的新列表,而原始列表保持不变。(我需要用这个方法来做,而不是像列表推导式这样的方法,因为以后我想做不同的事情,而不是每个项翻倍)。

def DoubleList(listToDouble):
tempList = listToDouble
for i in range(4):
tempList[i] *= 2
return tempList
mainList = [100, 100, 32, 32]
print('List =', mainList) # Should print [100, 100, 32, 32]
doubledList = DoubleList(mainList)
print('Doubled list =', doubledList) # Should print [200, 200, 64, 64]
print('Final List =', mainList) # mainList was never changed, so should print [100, 100, 32, 32]?

当前打印:

List = [100, 100, 32, 32]
Doubled list = [200, 200, 64, 64]
Final List = [200, 200, 64, 64]  

我本以为doubledList会翻倍(这很好),但mainList会保持不变(目前它也翻倍)。

这就是它应该做的,我只是错过了它?感谢任何可以帮助的人!:)

在python中你不能传递值,你传递的是一个引用,这意味着引用是同一个列表。

如果你复制列表,那么你得到预期的行为:

tempList = listToDouble[:]

最新更新