不明白python pop改变多个变量

时间:2010-12-16 21:22:28

标签: python list pop

我确信这很简单,我忽略了,但我希望有人可以向我解释以下内容:

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(),但我不明白为什么原来的列表被修改,如果我只是'弹出'备用列表的元素...

4 个答案:

答案 0 :(得分:7)

Python中的所有内容都是一个参考。他们是同一个名单。

altList = origList[:]

答案 1 :(得分:3)

这是因为行:

altList = origList

不会创建origList对象的副本。这两个名称都将引用相同的底层对象。要创建副本,请参阅copy module

答案 2 :(得分:2)

这是因为当你说

altList = origList

你实际上是将altList的位置指向origList的位置(因为python中的所有内容都是一个对象)。有效地,这里的平等意味着“使这些对象成为同一个”,而不是给它们相同的值。

答案 3 :(得分:1)

“问题”就在这一行:

altList = origList

在Python中,像这样的列表的赋值仅执行“浅拷贝”; altList只是对origList中数据的另一个引用,而不是一个全新的副本。

要获得所需内容,请尝试

from copy import deepcopy

altList = deepcopy(origList)