我刚刚拥有.我无法相信这是真的,但经过测试,我发现它是:
class A(object):
v = []
a = A()
b = A()
Run Code Online (Sandbox Code Playgroud)
您如何看待以下代码将返回?
a.v is b.v
Run Code Online (Sandbox Code Playgroud)
这段代码怎么样?
a.v.append(1)
a.v[0] == b.v[0]
Run Code Online (Sandbox Code Playgroud)
果然a.v is b.v,他们都共享相同的参考,以相同的列表.来自一个,以及其他所有编程语言背景,这有什么意义?
在Java中,如果我要写一个这样的类:
class A {
public Object[] v = new Object[]{};
}
Run Code Online (Sandbox Code Playgroud)
...在我最疯狂的梦想中,我绝不会认为该类的两个实例将共享相同的数组引用.
我的主要问题是,Python类中的初始值是否与Java,C#等相同?为什么该类的所有实例共享相同的列表相同的引用?
Tim*_*ker 13
您已定义了类属性而不是实例属性.Python正在做正确的事情.
代替
class A(object):
v = [] # Class attribute, shared across all instances!
Run Code Online (Sandbox Code Playgroud)
你需要
class A(object):
def __init__(self): # Instance attribute, created anew for each new object
self.v = []
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |