[issue892902] problem with pickling newstyle class instances

Alexandre Vassalotti report at bugs.python.org
Fri May 3 03:33:11 CEST 2013


Alexandre Vassalotti added the comment:

I fixed this while working on PEP 3154 [http://hg.python.org/features/pep-3154-alexandre/rev/eed9142d664f]. The relevant piece is

@@ -420,7 +424,13 @@ class _Pickler:
             write(REDUCE)
 
         if obj is not None:
-            self.memoize(obj)
+            # If the object is already in the memo, this means it is
+            # recursive. In this case, throw away everything we put on the
+            # stack, and fetch the object back from the memo.
+            if id(obj) in self.memo:
+                write(POP + self.get(self.memo[id(obj)][0]))
+            else:
+                self.memoize(obj)
 
         # More new special cases (that work with older protocols as
         # well): when __reduce__ returns a tuple with 4 or 5 items,

It would be pretty easy to backport this to 2.7 and 3.3. It is also good to mention that that only protocol 0 and 1 are affected.

----------

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue892902>
_______________________________________


More information about the Python-bugs-list mailing list