python - 函数无意中修改了外部变量
问题描述
这看起来非常基本,但是由于某种原因,我的列表在调用函数时被修改了,即使我从未更改它的值。
我想创建一个值加倍的新列表,而原始列表保持不变。(我需要用这种方法来做这件事,而不是像列表推导这样的方法,因为后来我想做不同的事情,而不是把每个术语加倍)。
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[:]