我试着在互联网上搜索,但找不到hashable的意思。
当他们说对象是hashable或hashable objects是什么意思?
发布于 2013-01-26 17:49:09
从Python glossary
如果一个对象的哈希值在其生命周期内永远不会改变(它需要一个__hash__()方法),并且可以与其他对象进行比较(它需要一个__eq__()或__cmp__()方法),那么它是hashable的。比较相等的Hashable对象必须具有相同的散列值。
Hashability使对象可用作字典键和集成员,因为这些数据结构在内部使用散列值。
Python的所有不可变的内置对象都是hashable的,而可变容器(如列表或字典)则不是。默认情况下,作为用户定义类的实例的对象是可散列的;它们都比较不相等,并且它们的散列值是它们的id()。
发布于 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
发布于 2017-07-03 16:20:02
任何不可变的东西(可变的意思,可能会改变)都可以被散列。除了要查找的散列函数之外,如果一个类有散列函数,则通过例如。dir(tuple)并查找__hash__方法,下面是一些示例
#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不可变类型的列表:
int, float, decimal, complex, bool, string, tuple, range, frozenset, bytes可变类型的列表:
list, dict, set, bytearray, user-defined classeshttps://stackoverflow.com/questions/14535730
复制相似问题