Closes #14298: update section about dict implementation.

This commit is contained in:
Georg Brandl 2012-03-14 07:50:17 +01:00
parent 1725feabd0
commit b20a019d46

View file

@ -526,14 +526,16 @@ far) under most circumstances, and the implementation is simpler.
Dictionaries work by computing a hash code for each key stored in the dictionary Dictionaries work by computing a hash code for each key stored in the dictionary
using the :func:`hash` built-in function. The hash code varies widely depending using the :func:`hash` built-in function. The hash code varies widely depending
on the key; for example, "Python" hashes to -539294296 while "python", a string on the key and a per-process seed; for example, "Python" could hash to
that differs by a single bit, hashes to 1142331976. The hash code is then used -539294296 while "python", a string that differs by a single bit, could hash
to calculate a location in an internal array where the value will be stored. to 1142331976. The hash code is then used to calculate a location in an
Assuming that you're storing keys that all have different hash values, this internal array where the value will be stored. Assuming that you're storing
means that dictionaries take constant time -- O(1), in computer science notation keys that all have different hash values, this means that dictionaries take
-- to retrieve a key. It also means that no sorted order of the keys is constant time -- O(1), in computer science notation -- to retrieve a key. It
maintained, and traversing the array as the ``.keys()`` and ``.items()`` do will also means that no sorted order of the keys is maintained, and traversing the
output the dictionary's content in some arbitrary jumbled order. array as the ``.keys()`` and ``.items()`` do will output the dictionary's
content in some arbitrary jumbled order that can change with every invocation of
a program.
Why must dictionary keys be immutable? Why must dictionary keys be immutable?