不理解python pop如何改变多个变量

2 投票
4 回答
720 浏览
提问于 2025-04-16 08:38

我相信这应该是我忽略了什么简单的东西,但我希望有人能给我解释一下:

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 个回答

2

这是因为当你写

altList = origList

时,你实际上是在把altList的地址指向origList的地址(因为在Python中,一切都是对象)。简单来说,这里的相等意味着“让这两个变成同一个对象”,而不是让它们的值相同。

3

这是因为这一行:

altList = origList

并没有创建一个origList对象的副本。两个名字其实指向的是同一个底层对象。如果你想要创建一个副本,可以查看一下copy模块

7

在Python中,所有东西都是引用。也就是说,它们其实指向的是同一个列表。

altList = origList[:]

撰写回答