Python中的hashable(散列)


Python文档中的解释:

一个对象是可散列的,那么在它的生命周期中它的hash 值是不变的。

可散列的对象需要2个方法:__hash__()方法和__eq__()方法。两个可散列的对象相等,那么它们的散列值相等。

 

可散列的对象可以作为字典的key,作为set的成员。但是字典,set本身是不可散列的。

 

Python所有内置的不可变的对象都是hashable,可变的容器(比如lists或dictionaries)不是hashable。

用户定义的类的对象默认是hashable的,它们的hash值来自它们的id()。

 

Python hash()函数

描述

hash() 用于获取取一个对象(字符串或者数值等)的哈希值。

语法

hash 语法:

hash(object)

参数说明:

  • object -- 对象;
  • 返回值

    返回对象的哈希值。

    实例

    以下实例展示了 hash 的使用方法:

     

 

hash() 函数可以应用于数字、字符串和对象,不能直接应用于 list、set、dictionary。

在 hash() 对对象使用时,所得的结果不仅和对象的内容有关,还和对象的 id(),也就是内存地址有关。

class Test: def __init__(self, i): self.i = i for i in range(10): t = Test(1) print(hash(t), id(t))

输出结果:

(277855628, 4445690048) (277855637, 4445690192) (277855628, 4445690048) (277855637, 4445690192) (277855628, 4445690048) (277855637, 4445690192) (277855628, 4445690048) (277855637, 4445690192) (277855628, 4445690048) (277855637, 4445690192)

列表,字典,集合是无法散列的,因为它们在改变值的同时却没有改变id,无法由地址定位值的唯一性,因而无法散列。
 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM