> On Jun 21, 2016, at 10:18 AM, Guido van Rossum <gu...@python.org> wrote:
> 
> Judging from Inada's message there seems to be some confusion about how well 
> the compact dict preserves order (personally I think if it doesn't guarantee 
> order after deletions it's pretty useless).

Inada should follow PyPy's implementation of the compact dict which does 
preserve order after deletions (see below).

My original proof-of-concept code didn't have that feature; instead, it was 
aimed at saving space and speeding-up iteration.  The key ordering was just a 
by-product.  Additional logic was needed to preserve order for interleaved 
insertions and deletions.


Raymond


---(PyPy test of order 
preservation)-------------------------------------------------------------

'Demonstrate PyPy preserves order across repeated insertions and deletions'

from random import randrange
import string

s = list(string.letters)
d = dict.fromkeys(s)
n = len(s)
for _ in range(10000):
    i = randrange(n)
    c = s.pop(i);    s.append(c)
    d.pop(c);        d[c] = None
    assert d.keys() == s


---(PyPy session showing order 
preservation)--------------------------------------------------

$ pypy
Python 2.7.10 (c09c19272c990a0611b17569a0085ad1ab00c8ff, Jun 13 2016, 03:59:08)
[PyPy 5.3.0 with GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on 
darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>> d = dict(raymond='red', rachel='blue', matthew='yellow')
>>>> del d['rachel']
>>>> d['cindy'] = 'green'
>>>> d['rachel'] = 'azure'
>>>> d
{'raymond': 'red', 'matthew': 'yellow', 'cindy': 'green', 'rachel': 'azure'}

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to