class C:
a=1 #不可变对象,在实例中调用时不可改变
b={} #可变对象,实例调用时可以改变值
c=C()
print c.a #查找实例c的__dict__中是否有属性a,如果没有则去类的__dict__中查找
c.a=2 # 查找实例c的__dict__中是否有属性a,如果没有则创建了一个实例属性(覆盖类属性)
c.b['name']='fang' # 查找实例c的__dict__中是否有属性b,如果没有则去类的__dict__中查找
最终这句话会改变类属性b
c.b='fang' # 查找实例c的__dict__中是否有属性b,没有则创建实例属性b
print c.__dict__,C.__dict__
print c.a,C.a
print c.b,C.b
结果:
{'a': 2, 'b': 'fang'} {'a': 1, , 'b': {'name': 'fang'}}
2 1
fang {'name': 'fang'}