Python 2.7 と Python 3.3 の辞書の順序: 変更の理由
Python 2.7 では、辞書キーの順序は任意でしたが一貫性がありました。ただし、この動作は Python 3.3 で変更され、vars() などのメソッドから取得されたキーの順序が非決定的であるように見えます。
この非決定性は、2012 年に実装されたセキュリティ修正に起因しており、デフォルトで有効になっていました。 Python 3.3では。この修正では、特定のセキュリティ脆弱性を防ぐためにハッシュのランダム化が導入されました。その結果、辞書とセットの反復順序は予測不可能になりました。
Python 3.6 では、挿入順序を保持する dict クラスの新しい実装が導入されました。その結果、Python 3.7 では、辞書の順序保持動作が保証されるようになりました。
特定の使用例における予期しない一貫性
順序付けが非決定的であるにもかかわらず、一貫した秩序が保たれている場合。例:
list({str(i): i for i in range(10)}.keys())
Python 2.7 および Python 3.6 (およびそれ以降) では、この式は一貫して次の順序を生成します:
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
これは、反例が集合内包表記を使用しているためです。暗黙的な順序付き辞書を作成します。ただし、Python 3.3 では、ハッシュ衝突の処理の制限により、順序が依然として異なる可能性があります。
以上が辞書の順序付け動作が Python 2.7 と 3.3 で変更されたのはなぜですか?また、その後どのように進化しましたか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。