From 064567e41a4a0a2e717e9cc5ec960f366bd8491c Mon Sep 17 00:00:00 2001 From: Tim Peters Date: Tue, 28 Jan 2003 01:34:43 +0000 Subject: [PATCH] save_dict(): Untangled most of the bin-vs-not-bin logic. Also used iteritems() instead of materializing a (possibly giant) list of the items. --- Lib/pickle.py | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/Lib/pickle.py b/Lib/pickle.py index f8ecad592c..957a87fdba 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -508,29 +508,28 @@ class Pickler: def save_dict(self, object): write = self.write save = self.save + items = object.iteritems() if self.bin: write(EMPTY_DICT) - else: - write(MARK + DICT) - - self.memoize(object) - - using_setitems = (self.bin and (len(object) > 1)) + self.memoize(object) + if len(object) > 1: + write(MARK) + for key, value in items: + save(key) + save(value) + write(SETITEMS) + return - if using_setitems: - write(MARK) + else: # proto 0 -- can't use EMPTY_DICT or SETITEMS + write(MARK + DICT) + self.memoize(object) - items = object.items() + # proto 0 or len(object) < 2 for key, value in items: save(key) save(value) - - if not using_setitems: - write(SETITEM) - - if using_setitems: - write(SETITEMS) + write(SETITEM) dispatch[DictionaryType] = save_dict if not PyStringMap is None: -- 2.40.0