pickle and weakref
nagylzs at freemail.hu
Fri Jan 10 14:57:26 CET 2003
I wonder if there is a standard way to pickle/unpickle weak references.
My idea is the following:
a = A()
b = A()
c = A()
a.b = b
a.ref_b = weakref.ref(b)
a.ref_c = weakref.ref(c)
data = pickle.dumps(a)
a = pickle.loads(data)
print a # <__main__.A instance at 0X???? >
print a.b # <__main__.A instance at 0X????>
print a.c # None
print a.ref_b # <weakref at 0x???? to 'instance' at 0x????>,
references to pickled instances should be unpickled gracefully
print a.ref_c # <weakref at ????; dead>, references to other (not
pickled) instances should be unpickled as a dead reference
I've already written a wrapper class to do this but it is not a general
solution. My wrapper uses the 'Ownership' concept and
can pickle weak references to instances of a given class only.
This extension should not affect older codes because they don't pickle
any weak references.
What do you think? Is this a good idea?
More information about the Python-list