Index: Lib/test/test_defaultdict.py =================================================================== --- Lib/test/test_defaultdict.py (revision 66997) +++ Lib/test/test_defaultdict.py (working copy) @@ -2,6 +2,7 @@ import os import copy +import pickle import tempfile import unittest from test import support @@ -164,6 +165,13 @@ finally: os.remove(tfn) + def test_pickleing(self): + d = defaultdict(int) + d[1] + for proto in range(pickle.HIGHEST_PROTOCOL + 1): + s = pickle.dumps(d, proto) + o = pickle.loads(s) + self.assertEqual(d, o) def test_main(): support.run_unittest(TestDefaultDict) Index: Modules/_collectionsmodule.c =================================================================== --- Modules/_collectionsmodule.c (revision 66997) +++ Modules/_collectionsmodule.c (working copy) @@ -1155,6 +1155,7 @@ */ PyObject *args; PyObject *items; + PyObject *iter; PyObject *result; if (dd->default_factory == NULL || dd->default_factory == Py_None) args = PyTuple_New(0); @@ -1167,8 +1168,15 @@ Py_DECREF(args); return NULL; } + iter = PyObject_GetIter(items); + if (iter == NULL) { + Py_DECREF(items); + Py_DECREF(args); + return NULL; + } result = PyTuple_Pack(5, Py_TYPE(dd), args, - Py_None, Py_None, items); + Py_None, Py_None, iter); + Py_DECREF(iter); Py_DECREF(items); Py_DECREF(args); return result;