为什么不可哈希的列表可以作为字典的键?

为什么不可哈希的列表可以作为字典的键?

不可哈希列表作为元组的键

众所周知,Python 中的字典 (dict) 对象不接受不可哈希的对象作为其键。已知哈希类型包括字符串、整数、浮点数、布尔值、元组和 None;不可哈希类型有字典、数组和集合。

但在某些情况下,用 ([1, 2],) 包裹不可哈希对象 list 后,仍然可以将其用作字典键。这是因为 ([1, 2],) 本身作为整体是可哈希的元组,即使其包含不可哈希元素。

元组哈希函数

元组的哈希函数会计算其内部所有元素的哈希值。因此,([1, 2],) 的哈希值实际上是由 1 和 2 的哈希值共同决定的。

自定义对象的可哈希性

此外,自定义类也可以通过实现 __hash__() 方法来使其实例可哈希。通过定义该方法,可以控制对象的哈希值生成方式。在此例中,custom_obj 的哈希值是由其 value 属性决定的。

以上就是为什么不可哈希的列表可以作为字典的键?的详细内容,更多请关注其它相关文章!