为什么python列表不是本地的

时间:2018-01-21 20:12:54

标签: python python-3.x global-variables local-variables

我认为所有的python变量都是本地的。但是,我发现列表不是这种情况。在我看来这是非常危险的。

这段代码:

def f(piano):
    piano[1]=3
    print(piano)
pizza=[1,2]
f(pizza)
print(pizza)

输出:

[1,3]
[1,3]

如果列表是本地的,那应该是:

[1,3]
[1,2]

有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

从技术上讲,你是对的,因为piano变量是本地的。但是,它仍然指向与pizza相同的内部引用。

这就是幕后发生的事情:

您分配了一个新的值列表,并创建了一个名为pizza的变量,以便您可以参考它:

pizza -> [ 1 , 2 ]

将此变量赋值给另一个变量时,只复制指向引用的指针,但引用本身仍然存在。

 other_var = pizza

 other_var -
            |
 pizza -----|--> [ 1 , 2 ]

因此,当您从技术上将pizza传递给函数f时,您只是将指针复制到同一列表,并创建一个不同的命名变量来引用。

是的,这个新创建的变量只能在f范围内访问,所以是的,它是本地。但是如果你以任何方式改变它的引用,那就好像你在改变pizza本身,因为它们都指向同一个对象。