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
实用程序
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 中提出了一个原生的 freezedict 类型,但由于担心其潜在用途而被撤回。尽管如此,像 FrozenDict 这样的自定义实现为需要不可变、可哈希字典的情况提供了实用的解决方案。
以上是如何在 Python 中实现不可变、可哈希的字典?的详细内容。更多信息请关注PHP中文网其他相关文章!