ホームページ  >  記事  >  バックエンド開発  >  Python 3 の辞書キーの順序が非決定的であるのはなぜですか?

Python 3 の辞書キーの順序が非決定的であるのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-21 15:07:301000ブラウズ

Why Is Python 3 Dictionary Key Ordering Non-Deterministic?

Python 3 における辞書キーの非決定的な順序

Python 2 では、辞書キーの順序は一貫していましたが、保証されていませんでした。ただし、Python 3 では、vars() などの関数から取得される辞書キーの順序が非決定的であるように見えます。

非決定性の原因

この変更は次のとおりです。これは、Python 3.3 に実装されたセキュリティ修正が原因であると考えられます。予測可能なハッシュ値を防ぐために、ハッシュ計算ではランダム シードが使用されます。このランダム化により、辞書キーの順序が予測不能になります。

Python 3.6 以降での順序の保持

Python 3.6 では、辞書の新しい実装が導入され、デフォルトの広告掲載オーダー。 Python 3.7 以降、この動作は Python 言語仕様によって保証されています。

非決定性の逆転

ハッシュのランダム化を無効にして以前の動作に戻すには、次のように設定します。 PYTHONHASHSEED 環境変数を 0 に設定します。ただし、これはセキュリティ上の理由からお勧めできません。

例外: Set Keys

辞書とは異なり、Python のセットは常に維持されます。

例: 一貫した辞書キーの順序

Python 3.3 では辞書キーは非決定的ですが、セットを使用して辞書キーを文字列は順序を保持します。例:

<code class="python">set([str(i): i for i in range(10)].keys())</code>

これは一貫してリスト ['0', '1', '2', '3', '4', '5', '6', '7' を返します。 、'8'、'9'].

追加情報

ハッシュのランダム化の詳細については、object.__hash__() のドキュメントを参照してください。

以上がPython 3 の辞書キーの順序が非決定的であるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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