首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NamedTuples、Hashable和Python

NamedTuples、Hashable和Python
EN

Stack Overflow用户
提问于 2019-03-28 15:54:36
回答 1查看 931关注 0票数 4

考虑以下代码:

代码语言:javascript
复制
#!/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)

会产生此错误。

代码语言:javascript
复制
Traceback (most recent call last):
  File "./temp.py", line 14, in <module>
    my_dict[p] = 10
TypeError: unhashable type: 'set'

在本例中,它是示例代码,我已经对其进行了大量简化,因此很容易看出错误的来源。typed.NamedTuple obviousl根据其所有实例变量计算其哈希值,其中一个实例变量是一个集合。然而,当我发现这一点时,找到它是很痛苦的。

所以,我的问题是,为什么错误信息显示这一点?如果不是TypeError: unhashable type: 'Person'的话。为什么追踪不是从蟒蛇的肠子里来的,实际上是错误的地方。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-28 18:27:24

NamedTuple基于tuple类。请参阅collections.namedtuple()

tuple的散列是所有元素的组合散列。请参阅tupleobject.c

由于set是不可理解的,所以不可能对包含settupleNamedTuple进行散列。

而且,由于集合的散列是用C实现的,所以您看不到回溯

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55401942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档