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