ホームページ  >  記事  >  バックエンド開発  >  Python 3.3 以降では辞書の順序付けが非決定的になるのはなぜですか?

Python 3.3 以降では辞書の順序付けが非決定的になるのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-21 15:22:02334ブラウズ

Why Is Dictionary Ordering Non-Deterministic Post-Python 3.3?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。