[Python-Dev] Python 3.6 dict becomes compact and gets a private version; and keywords become ordered

Elvis Pranskevichus elprans at gmail.com
Fri Sep 9 13:08:03 EDT 2016


On Friday, September 9, 2016 4:52:21 PM EDT Brett Cannon wrote:
> On Fri, 9 Sep 2016 at 01:58 Antoine Pitrou <solipsis at pitrou.net> wrote:
> > On Thu, 8 Sep 2016 14:20:53 -0700
> > 
> > Victor Stinner <victor.stinner at gmail.com> wrote:
> > > 2016-09-08 13:36 GMT-07:00 Guido van Rossum <guido at python.org>:
> > > > IIUC there's one small thing we might still want to change somewhere
> > > > after 3.6b1 but before 3.6rc1: the order is not preserved when you
> > > > delete some keys and then add some other keys. Apparently PyPy has
> > > > come up with a clever solution for this, and we should probably adopt
> > > > it, but it's probably best not to hurry that for 3.6b1.
> > > 
> > > Very good news: I was wrong, Raymond Hettinger confirmed that the
> > > Python 3.6 dict *already* preserves the items order in all cases. In
> > > short, Python 3.6 dict = Python 3.5 OrderedDict (in fact, OrderedDict
> > > has a few more methods).
> > 
> > Is it an official feature of the language or an implementation detail?
> 
> It depends on the context. **kwargs is now defined to be an ordered mapping
> and PEP 520 has been updated to drop __definition_order__ and to say that
> cls.__dict__ is an ordered mapping. Otherwise we have not made dict itself
> ordered everywhere.
> 
> And there has been discussion to rip out the C code for OrderedDict and
> change the Python code to subclass dict so it only has to provide its
> additions to the dict API.

Are there any downsides to explicitly specifying that all dicts are ordered?  
People will inevitably start relying on this behaviour, and this will 
essentially become the *de-facto* spec, so alternative Python implementations 
will have to follow suit anyway.

                                    Elvis




More information about the Python-Dev mailing list