什么是可哈希(hashable)?
简要的说可哈希的数据类型,即不可变的数据结构(字符串str、元组tuple、对象集objects)。
哈希有啥作用?
它是一个将大体量数据转化为很小数据的过程,甚至可以仅仅是一个数字,以便我们可以用在固定的时间复杂度下查询它,所以,哈希对高效的算法和数据结构很重要。
什么是不可哈希(unhashable)?
同理,不可哈希的数据类型,即可变的数据结构 (字典dict,列表list,集合set)
哈希解析:
可哈希 就是可以用python内置函数 hash 得出哈希值。
对任意对象 o,如果 o.hash() 返回一个4102整型值,那 o 就是可哈希的。
各种标量、tuple、正确实现了版 hash 函数的类的实权例都是可哈希的
Python 的某些链接库在内部需要使用hash值,例如往集合中添加对象时会用__hash__() 方法来获取hash值,看它是否与集合中现有对象的hash值相同,如果相同则会舍去不加入,如果不同,则使用__eq__() 方法比较是否相等,以确定是否需要加入其中。
可哈希和不可哈希的详细解析
对于 Python 的内建类型来说,只要是创建之后无法修改的(immutable)类型都是 hashable 如字符串,可变动的都是 unhashable的比如:列表、字典、集合,他们在改变值的同时却没有改变id,无法由地址定位值的唯一性,因而无法哈希。我们自定义的类的实例对象默认也是可哈希的(hashable),而hash值也就是它们的id()。