[Python-checkins] python/dist/src/Lib pickle.py,1.91,1.92

Guido van Rossum guido@python.org
Mon, 27 Jan 2003 22:21:57 -0500


> > !         using_setitems = (self.bin and (len(object) > 1))
> >   
> > !         if using_setitems:
> > !             write(MARK)
> >   
> > !         items = object.items()
> >           for key, value in items:
> >               save(key)
> >               save(value)
> > ! 
> > !             if not using_setitems:
> > !                 write(SETITEM)
> > ! 
> > !         if using_setitems:
> > !             write(SETITEMS)
> >   
> >       dispatch[DictionaryType] = save_dict
> > --- 509,534 ----
> >           write = self.write
> >           save  = self.save
> > +         items = object.iteritems()
> >   
> >           if self.bin:
> >               write(EMPTY_DICT)
> > !             self.memoize(object)
> > !             if len(object) > 1:
> > !                 write(MARK)
> > !                 for key, value in items:
> > !                     save(key)
> > !                     save(value)
> > !                 write(SETITEMS)
> > !                 return
> 
> In the case where self.bin and len(object) == 1, the code looks
> like it does something different.
> 
> The old code would save(key) & save(value) since the for loop is
> executed.  The new code doesn't execute the loop though.
> 
> Am I missing something?

It falls through to the next block:

        # proto 0 or len(object) < 2
        for key, value in items:
            save(key)
            save(value)
            write(SETITEM)

--Guido van Rossum (home page: http://www.python.org/~guido/)