On Sat, 1 Aug 2020 at 00:32, Guido van Rossum <gu...@python.org> wrote:

> If true this would be a huge argument against adding indexing and slicing
> (other than the special case starting with 0). However, I don't think it's
> true. The dict implementation (again, starting in 3.6) actually stores the
> list of keys in a compact array, in the insertion order. The hash table
> stores indices into this array. Moreover, in order to implement the ordered
> property, you pretty much have to do this (since the hash table
> *definitely* isn't going to be ordered :-). So indexing and slicing into
> this array would seem to be possible, unless I am missing something. I'm
> CC"ing Inada Naoki because it's his code -- maybe he can enlighten us.
>

I’m not Inada Naoki :). So happy to be corrected, but I looked into this
quite closely.

The dict keys is compact only *until* you delete an item, at which point, a
hole is left in the array, which defeats direct lookups (either by indexing
or via a view).  Order preservation is still kept as code that iterates
over dictionaries knows to just skip the holes.

I’m unsure when/if compaction is called however. So there may be a
technique for forcing the keys to be compacted again.  This would cause
very unpredictable performance in the case of large dictionaries (a main
use-case here)

Steve


>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/CWQMLXNOEPCXUXPQSTUOI5VUF4V7R36B/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to