这是因为你设置
Test.A的一类属性,而不是一个实例属性。真的发生了什么是与test1.py,对象被读取从泡菜回文件是一样的test2.py,但它的使用,你原先分配的内存中的类
x.A。
当你的数据从文件被拆封,它创建的类类型的新实例,然后应用任何实例数据需要的地方。但是,你唯一的数据是一个类属性。它总是回头参考类多数民众赞成在内存中,你在一个被修改的,但不是在其他文件。
比较在这个例子中的区别:
class Test: A = [] # a class attribute def __init__(self): self.a = [] # an instance attribute
你会发现,在实例属性
a将被封装和拆封正常,而类的属性
A会简单地引用类在内存中。
for i in xrange(5): x.A.append(i) x.a.append(i)with open('data', 'w') as f: pickle.dump(x,f)with open('data') as f: y = pickle.load(f)>>> y.A[0, 1, 2, 3, 4]>>> y.a[0, 1, 2, 3, 4]>>> Test.A[0, 1, 2, 3, 4]>>> Test.A = [] # resetting the class attribute>>> y.a [0, 1, 2, 3, 4]>>> y.A # refers to the class attribute[]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)