Heim  >  Artikel  >  Backend-Entwicklung  >  Warum hat sich das Sortierverhalten des Wörterbuchs zwischen Python 2.7 und 3.3 geändert und wie hat es sich später weiterentwickelt?

Warum hat sich das Sortierverhalten des Wörterbuchs zwischen Python 2.7 und 3.3 geändert und wie hat es sich später weiterentwickelt?

DDD
DDDOriginal
2024-10-21 15:22:30963Durchsuche

Why Did the Dictionary Ordering Behavior Change Between Python 2.7 and 3.3, and How Did It Evolve Later?

Wörterbuchreihenfolge in Python 2.7 vs. Python 3.3: Warum die Änderung?

In Python 2.7 war die Reihenfolge der Wörterbuchschlüssel willkürlich, aber konsistent . Dieses Verhalten hat sich jedoch in Python 3.3 geändert, wo die Reihenfolge der von Methoden wie vars() erhaltenen Schlüssel nicht deterministisch erscheint.

Dieser Nichtdeterminismus ist auf einen 2012 implementierten Sicherheitsfix zurückzuführen, der standardmäßig aktiviert war in Python 3.3. Mit dem Fix wurde eine Hash-Randomisierung eingeführt, um bestimmte Sicherheitslücken zu vermeiden. Dadurch wurde die Iterationsreihenfolge von Wörterbüchern und Mengen unvorhersehbar.

In Python 3.6 wurde eine neue Implementierung für die dict-Klasse eingeführt, die die Einfügereihenfolge beibehält. Folglich ist ab Python 3.7 nun ein reihenfolgeerhaltendes Verhalten für Wörterbücher garantiert.

Unerwartete Konsistenz in bestimmten Anwendungsfällen

Trotz der nicht deterministischen Reihenfolge gibt es solche Fälle, in denen eine konsistente Reihenfolge aufrechterhalten wird. Zum Beispiel:

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

In Python 2.7 und Python 3.6 (und höher) erzeugt dieser Ausdruck konsistent die Reihenfolge:

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

Dies liegt daran, dass das Gegenbeispiel ein Mengenverständnis verwendet, das Erstellt ein implizit geordnetes Wörterbuch. In Python 3.3 kann die Reihenfolge jedoch aufgrund der Einschränkungen bei der Handhabung von Hash-Kollisionen noch variieren.

Das obige ist der detaillierte Inhalt vonWarum hat sich das Sortierverhalten des Wörterbuchs zwischen Python 2.7 und 3.3 geändert und wie hat es sich später weiterentwickelt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn