python - 为什么在 python 中从列表中创建一个 freezeset 会转换列表?

标签 python python-2.7 set

在Python中,当从列表中创建一个frozenset时,例如:

a=[1,2,3]
b=frozenset(a)

按预期迭代“a”中的项目会迭代 3 个项目,但迭代“b”中的项目也会迭代相同的 3 个项目。我预计“b”仅包含 1 个项目,即列表“a”。为什么会出现这种情况?

最佳答案

frozenset 将可迭代对象作为参数,并构造一个包含可迭代对象元素的集合。如果你想要一个包含列表本身的集合,那么你就不走运了:列表是可变的,不可散列,因此不能是集合的元素,无论是卡住还是其他。

可以做的是,首先创建一个包含列表元素的元组,然后创建一个包含该元组的卡住集。请注意,原始列表的元素递归地也必须是可散列的。

>>> frozenset(a)
frozenset([1, 2, 3])
>>> frozenset((tuple(a),))
frozenset([(1, 2, 3)])

关于python - 为什么在 python 中从列表中创建一个 freezeset 会转换列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46813114/

相关文章:

python - shutil.copyfileobj 错误地复制了数据

python - 无需下载即可获取 Gmail 附件文件名

python - 将两个 csv 数据混合为一个

c++ - 如何更改集合中的对象子成员

python - 创建原子集列表

c++ - 两个值的 std::set<int> 的快速散列?

python - 从 Python 调用和控制 GDB

python - 如何在 python PDB 中列出当前行?

python - 套接字错误 "[Errno 9] Bad file descriptor"可能是什么原因

python - 如何将文件从我的目录上传到 SharePoint