Warum ist die Wörterbuchreihenfolge in Python 3.3 nicht deterministisch?
In Python-Versionen vor 3.3 war die Reihenfolge der Wörterbuchschlüssel jedoch willkürlich konsistent. In Python 3.3 wurde diese Reihenfolge jedoch nicht deterministisch.
Diese Änderung resultiert aus einer Sicherheitskorrektur, die 2012 implementiert und in Python 3.3 standardmäßig aktiviert wurde. Die zur Behebung von Sicherheitslücken eingeführte Hash-Randomisierung führt dazu, dass die Iterationsreihenfolge von Wörterbüchern und Mengen unvorhersehbar ist und sich bei verschiedenen Python-Ausführungen unterscheidet.
Um die Hash-Randomisierung zu deaktivieren, können Sie die Umgebungsvariable PYTHONHASHSEED auf 0 setzen.
Kontraintuitives Beispiel
Während das Gegenbeispiel in der Frage nicht konsistent ist in Python 3.3 das gleiche Ergebnis liefern, ist die begrenzte Anzahl unterschiedlicher Reihenfolgen auf die Behandlung von Hash-Kollisionen zurückzuführen.
Diese Einschränkung besteht in Python 3.6 und späteren Versionen nicht mehr, wo die Einfügereihenfolge von Wörterbüchern immer beibehalten wird .
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3