>>> class counter: ... count = 0 ... def __init__(self): ... self.__class__.count += 1 ... >>> counter <class __main__.counter at 010EAECC> >>> counter.count 0 >>> c = counter() >>> c.count 1 >>> counter.count 1 >>> d = counter() >>> d.count 2 >>> c.count 2 >>> counter.count 2
这里面并没有对c.count进行修改 所以c.count和counter.count的id其实是一样的,所以这个说明他们指向的都是同一个对象,但是一旦对类实例进行赋值,比如c.count=2 这里面2其实是整数对象,写全了其实是c.count=new int(2) 这样的赋值(赋对象)将实例和类属性脱离,之前没有赋值前,count其实是类属性,实例只是调用了他,但是一旦进行赋值,或者说c.count+=2这样的赋值也会将实例和类属性进行脱离,这样c.count再怎么改变都不会影响到counter.count的值
下面的这个例子会再次说明这个问题
远空(376754792) 10:20:24
[深圳]冒泡(691515082) 10:20:34
如果你改变了引用,那等于是改变时拷贝
远空(376754792) 10:21:03
[深圳]冒泡(691515082) 10:21:24
远空(376754792) 10:22:31
好像跑题了、、
[深圳]冒泡(691515082) 10:22:42
class自己的属性只是在实例没有定义的时候可以被实例引用,实例如果改变这个引用,不影响类的属性
append不会改变类实例的引用指向,但是赋值比如a.a=3会改变,将实例属性和类属性分离