gpt4 book ai didi

python - pickle 链接对象

转载 作者:太空狗 更新时间:2023-10-29 18:31:51 24 4
gpt4 key购买 nike

我想 pickle 一个对象和引用第一个对象的第二个对象。当我天真地 pickle/unpickle 这两个对象时,引用变成了一个副本。如何保留两个对象 foobar.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)

最佳答案

我之前的回答没有表达您的意思。您的代码的问题是您没有使用 PicklerUnpickler 对象。这是一个包含多个转储调用的工作版本:

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

关于python - pickle 链接对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6376081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com