Skip to main content
 首页 » 编程设计

python之可怕的初始值之可变类型共享相同的引用

2025年05月04日9webabcd

<分区>

我刚刚拥有。我不敢相信这是真的,但经过测试,我发现它是:

class A(object): 
    v = [] 
 
a = A() 
b = A() 

您认为以下代码会返回什么?

a.v is b.v 

这个代码怎么样?

a.v.append(1) 
a.v[0] == b.v[0] 

果然,a.v 是 b.v,它们都共享相同的引用 相同的列表。来自,嗯,所有其他编程语言背景,这有什么意义?

在 Java 中,如果我要编写这样一个类:

class A { 
    public Object[] v = new Object[]{}; 
} 

...在我最疯狂的梦想中,我永远不会认为该类的两个实例会共享对数组的相同引用。

我的主要问题是,Python 类中的初始值是否与 Java、C# 等中的初始值等价?为什么该类的所有实例共享对同一列表的相同引用?