]> granicus.if.org Git - python/commitdiff
save_list(): Rewrote, to untangle the proto 0 from the proto 1 cases.
authorTim Peters <tim.peters@gmail.com>
Tue, 28 Jan 2003 01:15:46 +0000 (01:15 +0000)
committerTim Peters <tim.peters@gmail.com>
Tue, 28 Jan 2003 01:15:46 +0000 (01:15 +0000)
The code is much easier to follow now, and I bet it's faster too.

Lib/pickle.py

index b4a7e280d8b83d0075a43f9baa3ae7c62200c172..f8ecad592cf01065d91f823098fe40474eecbcb9 100644 (file)
@@ -483,24 +483,26 @@ class Pickler:
 
         if self.bin:
             write(EMPTY_LIST)
-        else:
-            write(MARK + LIST)
-
-        self.memoize(object)
-
-        using_appends = (self.bin and (len(object) > 1))
-
-        if using_appends:
-            write(MARK)
-
-        for element in object:
-            save(element)
+            self.memoize(object)
+            n = len(object)
+            if n > 1:
+                write(MARK)
+                for element in object:
+                    save(element)
+                write(APPENDS)
+            elif n:
+                assert n == 1
+                save(object[0])
+                write(APPEND)
+            # else the list is empty, and we're already done
 
-            if not using_appends:
+        else:   # proto 0 -- can't use EMPTY_LIST or APPENDS
+            write(MARK + LIST)
+            self.memoize(object)
+            for element in object:
+                save(element)
                 write(APPEND)
 
-        if using_appends:
-            write(APPENDS)
     dispatch[ListType] = save_list
 
     def save_dict(self, object):