我想挑选一个对象和第二个引用第一个对象的对象.当我天真地挑选/取消两个对象时,引用就变成了副本.如何保持两个对象之间的联系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)
Run Code Online (Sandbox Code Playgroud)
我之前的回答是错过了你的观点.代码的问题在于您没有使用Pickler和Unpickler对象.这是一个包含多个转储调用的工作版本:
import pickle
class Foo(object):
pass
foo = Foo()
bar = Foo()
bar.foo_ref = foo
f = open('tmp.pkl', 'wb')
p = pickle.Pickler(f)
p.dump(foo)
p.dump(bar)
f.close()
f = open('tmp.pkl', 'rb')
up = pickle.Unpickler(f)
foo2 = up.load()
bar2 = up.load()
print id(foo) == id(bar.foo_ref) # True
print id(foo2) == id(bar2.foo_ref) # True
Run Code Online (Sandbox Code Playgroud)