如何在 Python 中实现不可变、可哈希的字典?

Patricia Arquette
发布: 2024-10-31 09:48:02
原创
876 人浏览过

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
登录后复制

实用程序

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!