我想我疯了.我在repel(python3)中执行了以下操作:
class aClass():
da = {}
>>> a = aClass()
>>> b = aClass()
>>> a.da['T'] = 'Hello'
>>> print(a.da)
{'T': 'Hello'}
>>> print(b.da)
{'T': 'Hello'}
>>>
Run Code Online (Sandbox Code Playgroud)
a和b是同一类的两个不同实例.我分配了一些东西,为什么它出现在b?
我做了同样的但是使用字符串类型,完全没问题.
以下作品:
>>> a={}
>>> b={}
>>> print(a)
{}
>>> print(b)
{}
>>> a['x']='x'
>>> print(a)
{'x': 'x'}
>>> print(b)
{}
Run Code Online (Sandbox Code Playgroud)
但是,这是完全相同的事情不是吗?
aClass.da是类属性,而不是实例属性.a.da和b.da是相同的字典.
__init__而是在方法中创建字典.
class aClass:
def __init__(self):
self.da = {}
Run Code Online (Sandbox Code Playgroud)
(在Python 2中,应该是class aClass(object):.)
结果:
>>> a = aClass()
>>> b = aClass()
>>> a.da['T'] = 'Hello'
>>> print(a.da)
{'T': 'Hello'}
>>> print(b.da)
{}
Run Code Online (Sandbox Code Playgroud)