ホームページ  >  記事  >  バックエンド開発  >  不変でハッシュ可能な辞書を Python で実装するにはどうすればよいでしょうか?

不変でハッシュ可能な辞書を Python で実装するにはどうすればよいでしょうか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-31 09:48:02866ブラウズ

How Can You Implement Immutable, Hashable Dictionaries in Python?

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

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