什么是可哈希?
简单来说,可哈希的数据类型通常对应不可变结构,比如字符串(str)、元组(tuple)等。
为什么字符串是可哈希的?因为它本质上是不可变的。当你执行
a = '1'然后a = '2'时,实际上只是变量a的引用指向了新的内存地址,而原来的'1'对象本身并没有被修改。我们可以通过内置的id()函数来观察内存地址的变化:
str1 = '1'
print(id(str1))
str1 = '2'
print(id(str1))
运行后会看到两个不同的内存地址。这说明 '1' 和 '2' 是两个独立的对象。只要对象不被销毁,其内存地址保持不变,因此字符串是可哈希的。
同理,不可哈希的数据类型通常是可变结构,例如字典(dict)、列表(list)和集合(set)。如果允许它们作为字典的键,一旦内容发生变化,哈希值也会失效,导致查找错误。
注意 可哈希的数据结构可以直接用于去重等操作;而对于不可哈希的数据结构(如嵌套字典的列表),往往需要针对特定属性进行改造才能实现去重。处理这类情况时,需要根据具体场景调整逻辑。

