美文网首页程序员
可哈希(hashable)与不可哈希(unhashable)

可哈希(hashable)与不可哈希(unhashable)

作者: 三十六_ | 来源:发表于2017-09-13 16:36 被阅读1691次

An object is hashable if it has a hash value which never changes during its lifetime (it needs a __hash__() method), and can be compared to other objects (it needs an __ eq__() or __cmp__(). Hashable objects which compare equal must have the same hash value.

一个对象能被称为 hashable , 它必须有个 hash 值,这个值在整个生命周期都不会变化,而且必须可以进行相等比较,所以一个对象可哈希,它必须实现__hash__() 与 __eq__() 方法。

Python 的某些链接库在内部需要使用hash值,例如往集合中添加对象时会用__hash__() 方法来获取hash值,看它是否与集合中现有对象的hash值相同,如果相同则会舍去不加入,如果不同,则使用__eq__() 方法比较是否相等,以确定是否需要加入其中。

对于 Python 的内建类型来说,只要是创建之后无法修改的(immutable)类型都是 hashable 如字符串,可变动的都是 unhashable的比如:列表、字典、集合,他们在改变值的同时却没有改变id,无法由地址定位值的唯一性,因而无法哈希。我们自定义的类的实例对象默认也是可哈希的(hashable),而hash值也就是它们的id()。

相关文章

  • 可哈希(hashable)与不可哈希(unhashable)

    An object is hashable if it has a hash value which never ...

  • python数据分析基础30-返回对象的哈希值

    1、哈希 什么是可哈希(hashable)?简要的说可哈希的数据类型,即不可变的数据结构(字符串str、元组tup...

  • collections 模块的使用

    判断数据类型 1、Hashable 判断是否可哈希,即是否有哈希值,即是否为可变对象可变对象没有哈希值,不可变对象...

  • Python2.7学习笔记 dict&set

    ***Dict Python内置了dict类型,以key-value存储,是一个hashable 可哈希的数据类型...

  • 可哈希对象

    hashable 如果一个对象是可哈希的,那么它就有一个在其生命周期中都不会改变的哈希值,它会有一个__hash_...

  • 2018-08-01

    Python部分 1.元组属于不可变对象,列表属于可变对象,列表的很多方法不适用于元组;元组可哈希而列表不可哈希 ...

  • 《Python CookBook》读书笔记-数据结构和算法(二)

    从序列中移除重复项且保持元素间顺序不变 方法 可以用集合和生成器来解决 先来了解下什么是可哈希(hashable)...

  • python 的集合操作 set

    集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了...

  • 哈希表—链地址法

    冰冻非一日之寒 哈希冲突是不可避免的,所以我们在设计哈希函数的同时,也要设计解决哈希冲突的办法。 哈希表本质就是一...

  • golang 字典map

     当在哈希表中查找某个与键值对应的元素值时,我们需要先把键值作为参数传给这个哈希表。哈希表会先用哈希函数(hash...

网友评论

    本文标题:可哈希(hashable)与不可哈希(unhashable)

    本文链接:https://www.haomeiwen.com/subject/jgpksxtx.html