Change Pickler._batch_appends() and Pickler._batch_setitems() to take
an iterable object, instead of an iterator.
diff --git a/Lib/pickle.py b/Lib/pickle.py
index bf5c951..25ffd03 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -594,7 +594,7 @@
             write(MARK + LIST)
 
         self.memoize(obj)
-        self._batch_appends(iter(obj))
+        self._batch_appends(obj)
 
     dispatch[list] = save_list
 
@@ -611,6 +611,7 @@
                 write(APPEND)
             return
 
+        items = iter(items)
         r = range(self._BATCHSIZE)
         while items is not None:
             tmp = []
@@ -641,7 +642,7 @@
             write(MARK + DICT)
 
         self.memoize(obj)
-        self._batch_setitems(iter(obj.items()))
+        self._batch_setitems(obj.items())
 
     dispatch[dict] = save_dict
     if PyStringMap is not None:
@@ -659,6 +660,7 @@
                 write(SETITEM)
             return
 
+        items = iter(items)
         r = range(self._BATCHSIZE)
         while items is not None:
             tmp = []