[Python-checkins] r73402 - in python/trunk/Lib: collections.py test/test_collections.py

alexandre.vassalotti python-checkins at python.org
Sat Jun 13 01:03:35 CEST 2009


Author: alexandre.vassalotti
Date: Sat Jun 13 01:03:35 2009
New Revision: 73402

Log:
Revert r73401 per Raymond Hettinger's request.

The rational is the change might cause imcompatiblity problems with
PyYAML. In addition, Raymond wants to kept the different versions of
collections synchronized across Python versions.


Modified:
   python/trunk/Lib/collections.py
   python/trunk/Lib/test/test_collections.py

Modified: python/trunk/Lib/collections.py
==============================================================================
--- python/trunk/Lib/collections.py	(original)
+++ python/trunk/Lib/collections.py	Sat Jun 13 01:03:35 2009
@@ -99,16 +99,14 @@
 
     def __reduce__(self):
         'Return state information for pickling'
-        dictitems = self.iteritems()
+        items = [[k, self[k]] for k in self]
         tmp = self.__map, self.__root
         del self.__map, self.__root
         inst_dict = vars(self).copy()
         self.__map, self.__root = tmp
-        # Set the state item to None when the dictionary is empty. This saves
-        # about 2 opcodes when the object is pickled.
-        if not inst_dict:
-            inst_dict = None
-        return (self.__class__, (), inst_dict, None, dictitems)
+        if inst_dict:
+            return (self.__class__, (items,), inst_dict)
+        return self.__class__, (items,)
 
     setdefault = MutableMapping.setdefault
     update = MutableMapping.update

Modified: python/trunk/Lib/test/test_collections.py
==============================================================================
--- python/trunk/Lib/test/test_collections.py	(original)
+++ python/trunk/Lib/test/test_collections.py	Sat Jun 13 01:03:35 2009
@@ -795,9 +795,9 @@
         # do not save instance dictionary if not needed
         pairs = [('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)]
         od = OrderedDict(pairs)
+        self.assertEqual(len(od.__reduce__()), 2)
         od.x = 10
-        self.assertGreaterEqual(len(od.__reduce__()), 2)
-        self.assertLessEqual(len(od.__reduce__()), 5)
+        self.assertEqual(len(od.__reduce__()), 3)
 
     def test_repr(self):
         od = OrderedDict([('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)])


More information about the Python-checkins mailing list