首页 > 解决方案 > 函数无意中修改了外部变量

问题描述

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

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

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

解决方案


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

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

tempList = listToDouble[:]

推荐阅读