【发布时间】:2011-06-16 17:31:09
【问题描述】:
我想腌制一个对象和引用第一个对象的第二个对象。当我天真地腌制/解开这两个对象时,引用就变成了副本。如何保留foo 和bar.foo_ref 两个对象之间的链接?
import pickle
class Foo(object):
pass
foo = Foo()
bar = Foo()
bar.foo_ref = foo
with open('tmp.pkl', 'wb') as f:
pickle.dump(foo, f)
pickle.dump(bar, f)
with open('tmp.pkl', 'rb') as f:
foo2 = pickle.load(f)
bar2 = pickle.load(f)
print id(foo) == id(bar.foo_ref) # True
print id(foo2) == id(bar2.foo_ref) # False
# want id(foo2) == id(bar2.foo_ref)
【问题讨论】:
-
我认为您不能在单独的泡菜中保留对象身份。如果你有一个包含 foo 和 bar 的主对象 x,并且在你解开它时腌制它 id(x.foo) == id(x.bar.foo_ref)