首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果一个对象是不可哈希的,那么询问它是否是一个字典键是错误的

如果一个对象是不可哈希的,那么询问它是否是一个字典键是错误的
EN

Stack Overflow用户
提问于 2017-04-29 03:10:09
回答 4查看 248关注 0票数 1

如果一个对象是不可散列的,比如一个set,那么询问它是否是字典中的键是错误的:

代码语言:javascript
运行
复制
>>> key = set()
>>> key in {}
Traceback (most recent call last):
TypeError: unhashable type: 'set'

我只是想知道为什么会这样。

编辑:我知道对象需要散列,但不知道为什么它需要是一个错误,如果它不能。

EN

Stack Overflow用户

发布于 2017-04-29 03:17:00

这样更有用。

key in d被认为等同于

代码语言:javascript
运行
复制
any(key == k for k in d)

对于不可散列的对象,这实际上可能是真的:

代码语言:javascript
运行
复制
d = {frozenset(): 1}
key = set()
print(any(key == k for k in d)) # prints True

因此,尝试总是为不可散列的对象返回False将会造成不一致。从理论上讲,我们可以尝试回退到for循环,但这将导致O(len(d))性能下降,并使字典的好处化为乌有。

此外,即使key in d对于不可访问的key总是False,或者如果它有某种回退,大多数发生这样的测试的实例仍然可能是由于bug而不是故意的。异常比False结果更有用。

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43687330

复制
相关文章

相似问题

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