]> granicus.if.org Git - python/commitdiff
Add getstate and setstate implementation to concrete set classes.
authorJeremy Hylton <jeremy@alum.mit.edu>
Wed, 13 Nov 2002 19:34:26 +0000 (19:34 +0000)
committerJeremy Hylton <jeremy@alum.mit.edu>
Wed, 13 Nov 2002 19:34:26 +0000 (19:34 +0000)
Lib/sets.py
Lib/test/test_sets.py

index a05c66f73c2faa9fc85cb47719a0cd540f5ab54b..5dac370a6447e0c52468be9382a4bdba67df5084 100644 (file)
@@ -366,6 +366,11 @@ class ImmutableSet(BaseSet):
             self._hashcode = self._compute_hash()
         return self._hashcode
 
+    def __getstate__(self):
+        return self._data, self._hashcode
+
+    def __setstate__(self, state):
+        self._data, self._hashcode = state
 
 class Set(BaseSet):
     """ Mutable set class."""
@@ -380,6 +385,13 @@ class Set(BaseSet):
         if iterable is not None:
             self._update(iterable)
 
+    def __getstate__(self):
+        # getstate's results are ignored if it is not
+        return self._data,
+
+    def __setstate__(self, data):
+        self._data, = data
+
     def __hash__(self):
         """A Set cannot be hashed."""
         # We inherit object.__hash__, so we must deny this explicitly
index 4521335c5169077bab481d19d819001002951905..cf0cd59dc9978c8ae18f31e4a0b2d8c1212fed11 100644 (file)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 
-import unittest, operator, copy
+import unittest, operator, copy, pickle
 from sets import Set, ImmutableSet
 from test import test_support
 
@@ -74,6 +74,14 @@ class TestBasicOps(unittest.TestCase):
         for v in self.set:
             self.assert_(v in self.values)
 
+    def test_pickling(self):
+        p = pickle.dumps(self.set)
+        print repr(p)
+        copy = pickle.loads(p)
+        repr(copy)
+        self.assertEqual(self.set, copy,
+                         "%s != %s" % (self.set, copy))
+
 #------------------------------------------------------------------------------
 
 class TestBasicOpsEmpty(TestBasicOps):