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