首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中"hashable“是什么意思?

在Python中"hashable“是什么意思?
EN

Stack Overflow用户
提问于 2013-01-26 17:48:07
回答 9查看 187.4K关注 0票数 272

我试着在互联网上搜索,但找不到hashable的意思。

当他们说对象是hashablehashable objects是什么意思?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2013-01-26 17:49:09

Python glossary

如果一个对象的哈希值在其生命周期内永远不会改变(它需要一个__hash__()方法),并且可以与其他对象进行比较(它需要一个__eq__()__cmp__()方法),那么它是hashable的。比较相等的Hashable对象必须具有相同的散列值。

Hashability使对象可用作字典键和集成员,因为这些数据结构在内部使用散列值。

Python的所有不可变的内置对象都是hashable的,而可变容器(如列表或字典)则不是。默认情况下,作为用户定义类的实例的对象是可散列的;它们都比较不相等,并且它们的散列值是它们的id()

票数 232
EN

Stack Overflow用户

发布于 2016-06-23 16:44:55

这里的所有答案都很好地解释了python中的hashable对象,但我认为人们需要首先理解术语哈希。

high 是计算机科学中的一个概念,用于创建高性能的伪随机访问数据结构,其中大量数据将被快速存储和访问。

例如,如果您有10,000个电话号码,并且希望将它们存储在一个数组中(数组是一种连续的数据结构,将数据存储在连续的内存位置中,并提供随机访问),但您可能没有所需的连续内存位置。

因此,您可以使用大小为100的数组,并使用散列函数将一组值映射到相同的索引,这些值可以存储在一个链表中。这提供了类似于数组的性能。

现在,哈希函数可以简单地将数字除以数组的大小,并将余数作为索引。

有关详细信息,请参阅https://en.wikipedia.org/wiki/Hash_function

这里有另一个很好的参考:http://interactivepython.org/runestone/static/pythonds/SortSearch/Hashing.html

票数 126
EN

Stack Overflow用户

发布于 2017-07-03 16:20:02

任何不可变的东西(可变的意思,可能会改变)都可以被散列。除了要查找的散列函数之外,如果一个类有散列函数,则通过例如。dir(tuple)并查找__hash__方法,下面是一些示例

代码语言:javascript
复制
#x = hash(set([1,2])) #set unhashable
x = hash(frozenset([1,2])) #hashable
#x = hash(([1,2], [2,3])) #tuple of mutable objects, unhashable
x = hash((1,2,3)) #tuple of immutable objects, hashable
#x = hash()
#x = hash({1,2}) #list of mutable objects, unhashable
#x = hash([1,2,3]) #list of immutable objects, unhashable

不可变类型的列表:

代码语言:javascript
复制
int, float, decimal, complex, bool, string, tuple, range, frozenset, bytes

可变类型的列表:

代码语言:javascript
复制
list, dict, set, bytearray, user-defined classes
票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14535730

复制
相关文章

相似问题

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