为什么 python 列表不是本地的



我认为所有的python变量都是局部的。但是,我发现列表并非如此。在我看来,这是非常危险的。

这段代码:

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

输出:

[1,3]
[1,3]

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

[1,3]
[1,2]

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

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

这是幕后发生的事情:

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

pizza -> [ 1 , 2 ]

将此变量分配给另一个变量时,仅复制指向引用的指针,但引用本身会保留。

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

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

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

相关内容

  • 没有找到相关文章

最新更新