Warum ist die Wörterbuch-Bestellung nicht-deterministisch?

Ich habe vor kurzem umgestellt von Python 2.7, Python 3.3, und es scheint, dass, während in Python 2 die Bestellung von Wörterbuch-Schlüssel war willkürlich, aber konsequent, in Python 3 die Anordnung der Tasten, der ein Wörterbuch, die mit z.B. vars() erscheint nicht-deterministisch.

Wenn ich laufen:

class Test(object): pass
parameters = vars(Test)
print(list(parameters.keys()))

in beiden Python 2.7 und Python 3.3, dann:

  • Python 2.7 konsequent gibt mir
    ['__dict__', '__module__', '__weakref__', '__doc__']
  • Mit Python 3.3, bekomme ich eine zufällige Reihenfolge – zum Beispiel:
    ['__weakref__', '__module__', '__qualname__', '__doc__', '__dict__']
    ['__doc__', '__dict__', '__qualname__', '__module__', '__weakref__']
    ['__dict__', '__module__', '__qualname__', '__weakref__', '__doc__']
    ['__weakref__', '__doc__', '__qualname__', '__dict__', '__module__']

Woher kommt dieses nicht-Determinismus kommen? Und warum ist so etwas wie

list({str(i): i for i in range(10)}.keys())

... im Einklang läuft, immer was

['3', '2', '1', '0', '7', '6', '5', '4', '9', '8']

... ?

InformationsquelleAutor Anaphory | 2013-02-19

Schreibe einen Kommentar