这个问题指向python中对象的可哈希性,其中在python的官方文档中,对hashable的解释如下
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() method). Hashable objects which compare equal must have the same hash value.
如果一个对象在其生命周期内其值不变,并且可以进行比较,就视作hashable的对象。
在今天的一个问题中,我简单的介绍了hash和hash碰撞的概念Python中hash出的值具体是怎么计算出来的 - 爱可可Q&A (aicoco.net)
那么为什么必须要值不变才能进行hash呢,这里我给出一个浅薄的解释如下:
Python的中变量通过引用的方式指向内存地址,在其生命周期内,其指向的内存地址一般是不变的。
对于不可变对象(可以理解为常量),一个值对应一个内存id,不同的值意味着不同的内存,相同的值存储在相同的内存,这里就可以将不可变对象理解成哈希表中的key,将内存理解为经过哈希运算的哈希值value。
对于可变对象,由于其在生命周期内值经常发生变化,但是内存id基本不变,因此会出现多个值指向同一个内存地址,出现了hash碰撞,不满足hash特性,因此是unhashable。
当然,以上为了简单的理解,没有介绍python的内存机制以及其他特性,但是应该可以帮助题主理解hashable这个概念。