如何在 Python 中實作不可變、可雜湊的字典?

Patricia Arquette
發布: 2024-10-31 09:48:02
原創
877 人瀏覽過

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
登入後複製

實用程式

實用程式

>>> cache = {}
>>> def memoized_function(args):
>>>     key = FrozenDict(args)
>>>     if key in cache:
>>>         return cache[key]
>>>     else:
>>>         result = ...  # Computation here
>>>         cache[key] = result
>>>         return result
登入後複製
FroDict 對於需要不可變和可散列鍵的快取和記憶特別有用。例如,它可用於儲存字典值的雜湊版本以進行有效比較:

PEP 603

值得注意的是PEP 603在Python 中提出了一個原生的freezedict 類型,但由於擔心其潛在用途而被撤回。儘管如此,像 FrozenDict 這樣的自訂實作為需要不可變、可雜湊字典的情況提供了實用的解決方案。

以上是如何在 Python 中實作不可變、可雜湊的字典?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!