gpt4 book ai didi

python - NamedTuples、Hashable 和 Python

转载 作者:行者123 更新时间:2023-12-04 13:42:14 27 4
gpt4 key购买 nike

考虑以下代码:

#!/usr/bin/env python3.7

from typing import NamedTuple, Set

class Person(NamedTuple):
name: str
fred: Set[str]


p = Person("Phil", set())
print(p)

my_dict = {}
my_dict[p] = 10


print(my_dict)

产生这个错误
Traceback (most recent call last):
File "./temp.py", line 14, in <module>
my_dict[p] = 10
TypeError: unhashable type: 'set'

在这种情况下,它是示例代码,我已经简化了很多,所以它
很容易看出错误来自哪里。 typed.NamedTuple显然,根据其所有实例变量计算其哈希值
其中一个是一套。然而,当我发现这一点时,
很难追踪。

所以,我的问题是,为什么错误消息会显示这个?应该是
不是 TypeError: unhashable type: 'Person' .为什么是
回溯不是来自 python 的内脏某处
错误实际上是。

最佳答案

NamedTuple基于 tuple类(class)。见 collections.namedtuple()
tuple 的哈希值是所有元素的组合哈希。见 tupleobject.c

set是不可散列的,不可能散列 tupleNamedTuple包含 set .

并且由于集合的散列是在 C 中实现的,因此您看不到回溯

关于python - NamedTuples、Hashable 和 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55401942/

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