Python 3.3 では辞書の順序付けが非決定的であるのはなぜですか?
Python 3.3 より前のバージョンでは、辞書キーの順序付けは任意でしたが、一貫性のある。ただし、Python 3.3 では、この順序は非決定的になりました。
この変更は、2012 年に実装され、Python 3.3 ではデフォルトで有効になったセキュリティ修正の結果です。セキュリティの脆弱性に対処するために導入されたハッシュのランダム化により、ディクショナリとセットの反復順序が予測不能になり、Python の実行ごとに異なります。
ハッシュのランダム化を無効にするには、PYTHONHASHSEED 環境変数を 0 に設定します。
直感に反する例
質問の反例は Python 3.3 で一貫して同じ結果を生成しませんが、異なる順序付けの数が限られているのは、ハッシュ衝突の処理に起因します。
この制限は Python 3.6 以降のバージョンではなくなり、辞書の挿入順序は常に保持されます。
以上がPython 3.3 以降では辞書の順序付けが非決定的になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。