Index: Modules/collectionsmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/collectionsmodule.c,v retrieving revision 1.35 diff -u -r1.35 collectionsmodule.c --- Modules/collectionsmodule.c 2 Nov 2004 02:11:35 -0000 1.35 +++ Modules/collectionsmodule.c 8 Nov 2004 07:58:35 -0000 @@ -550,19 +550,17 @@ static PyObject * deque_reduce(dequeobject *deque) { - PyObject *seq, *args, *result; + PyObject *dict, *result; - seq = PySequence_Tuple((PyObject *)deque); - if (seq == NULL) - return NULL; - args = PyTuple_Pack(1, seq); - if (args == NULL) { - Py_DECREF(seq); - return NULL; - } - result = PyTuple_Pack(2, deque->ob_type, args); - Py_DECREF(seq); - Py_DECREF(args); + dict = PyObject_GetAttrString((PyObject *)deque, "__dict__"); + if (dict == NULL) { + PyErr_Clear(); + dict = Py_None; + Py_INCREF(dict); + } + result = Py_BuildValue("O()ON", deque->ob_type, dict, + PyObject_GetIter((PyObject *)deque)); + Py_DECREF(dict); return result; } Index: Lib/test/test_deque.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_deque.py,v retrieving revision 1.17 diff -u -r1.17 test_deque.py --- Lib/test/test_deque.py 2 Oct 2004 13:59:34 -0000 1.17 +++ Lib/test/test_deque.py 8 Nov 2004 07:58:36 -0000 @@ -302,6 +302,14 @@ self.assertNotEqual(id(d), id(e)) self.assertEqual(list(d), list(e)) + def test_pickle_recursive(self): + d = deque() + d.append(d) + s = pickle.dumps(d) + e = pickle.loads(s) + self.assertNotEqual(id(d), id(e)) + self.assertEqual(id(e), id(e[0])) + def test_deepcopy(self): mut = [10] d = deque([mut]) @@ -472,6 +480,14 @@ self.assertEqual(type(d), type(e)) self.assertEqual(list(d), list(e)) + def test_pickle(self): + d = Deque() + d.d = d + s = pickle.dumps(d) + e = pickle.loads(s) + self.assertNotEqual(id(d), id(e)) + self.assertEqual(id(e), id(e.d)) + def test_weakref(self): d = deque('gallahad') p = proxy(d)