Python の不変でハッシュ可能な辞書
凍結セットとタプルは、Python のリストに対応する不変でハッシュ可能な辞書を提供します。しかし、辞書には同様の概念がありません。 「frozendict」は、辞書の不変でハッシュ可能な表現を提供します。
実装と使用法
Python はネイティブに凍結辞書タイプを提供しませんが、可能です。ラッパー クラスを使用してカスタム実装を作成するには:
<code class="python">class FrozenDict(collections.Mapping): # ... (code as provided in the reference answer)</code>
動作と比較
FrozenDict インスタンスは通常の辞書と同様に動作し、反復、項目アクセス、メンバーシップをサポートします。テスト中。ただし、これらは不変です。つまり、一度作成すると変更することはできません。
不変であるにもかかわらず、FrozenDict インスタンスはハッシュ可能な性質に基づいて同等であるかどうかを比較できます。
>>> x = FrozenDict(a=1, b=2) >>> y = FrozenDict(a=1, b=2) >>> x is y False >>> x == y True
Utility
FrozenDict は、不変キーとハッシュ可能なキーが必要なキャッシュとメモ化に特に役立ちます。たとえば、効率的な比較のために辞書の値のハッシュ バージョンを保存するために使用できます。
>>> cache = {} >>> def memoized_function(args): >>> key = FrozenDict(args) >>> if key in cache: >>> return cache[key] >>> else: >>> result = ... # Computation here >>> cache[key] = result >>> return result
PEP 603
PEP 603 は注目に値します。は Python でネイティブの frozendict 型を提案しましたが、潜在的な有用性に対する懸念から撤回されました。それにもかかわらず、FrozenDict のようなカスタム実装は、不変でハッシュ可能な辞書が必要な状況に対して実用的なソリューションを提供します。
以上が不変でハッシュ可能な辞書を Python で実装するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。