我确信这很简单,我忽略了,但我希望有人可以向我解释以下内容:
origList = [1, 2, 3, 4, 5, 6, 7, 8]
def test(inputList):
while range(len(inputList)):
inputList.pop()
altList = origList
test(altList)
print 'origList:', origList # prints origList: []
print 'altList:', altList # prints origList: []
我以为我理解了list.pop(),但我不明白为什么原来的列表被修改,如果我只是'弹出'备用列表的元素...
答案 0 :(得分:7)
Python中的所有内容都是一个参考。他们是同一个名单。
altList = origList[:]
答案 1 :(得分:3)
答案 2 :(得分:2)
这是因为当你说
时altList = origList
你实际上是将altList的位置指向origList的位置(因为python中的所有内容都是一个对象)。有效地,这里的平等意味着“使这些对象成为同一个”,而不是给它们相同的值。
答案 3 :(得分:1)
“问题”就在这一行:
altList = origList
在Python中,像这样的列表的赋值仅执行“浅拷贝”; altList只是对origList中数据的另一个引用,而不是一个全新的副本。
要获得所需内容,请尝试
from copy import deepcopy
altList = deepcopy(origList)