gpt4 book ai didi

python - 使对象不可变

转载 作者:太空宇宙 更新时间:2023-11-04 05:51:00 25 4
gpt4 key购买 nike

我有一个defaultdict(list),我想将其设置为不可变的,这样我就可以将这种类型的对象添加到一个集合中。我有一个关于如何使它不可变的想法,但这需要我编写几行代码。在 python 中没有更简单的方法吗?

在 python 中不是很常见的填充,例如 defaultdict(list),同时解析一段数据,然后在解析完成后卡住它吗?

对象可以是tuple类型但不能作为dict key的情况也是如此,例如:

>>> a = ([1,2],[2,3])
>>> type(a)
<type 'tuple'>
>>> d = dict()
>>> d[a] = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

为什么在python中存在列表的元组也是我不明白的。

最佳答案

另一种解决方案是使用pyrsistent 包link . Pysistent 是一些持久化集合(被一些人称为函数式数据结构)。在它们不可变的意义上是持久的。

我推荐使用 freeze link .

一个最小的工作示例 (MWE):

from pyrsistent import freeze
d = {"a":1, "b": 2}
d = freeze(d) # immutable dictionary
print(d)
## pmap({'b': 2, 'a': 1})

# Try to change a key-value
d["b"] = 10
## TypeError: 'PMap' object does not support item assignment

# If you want to change a value you need to create a new object using "update"
d.update({"b":10})
## pmap({'b': 10, 'a': 1})

关于python - 使对象不可变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30190069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com