Python Hashtable的理解
一个对象当其生命周期内的hash值不发生改变,而且可以跟其他对象进行比较时,这个对象就是Hashtable的。两者Hashtable的对象只有具有相同的hash值时才能判断为相同的对象。
- python中的基本类型都是Hashtable,比如str,bytes,数字类型等;
- 用户自定义的类型默认情况下都是hashtable,因为他们的hash值就是他们的id()值;
- frozenset始终都是hashtable的,因为他们所有的项目都是被定义成hashtable的;
- 只有当元组内的所有项都是hashtalbe时,元祖才是hashtalbe.具体请参见下面的例子
if __name__ == '__main__': tt = (1,2, (30, 40)) print(hash(tt)) tf = (1, 2, frozenset([30, 40])) print(hash(tf)) tl = (1, 2, [30, 40]) print(hash(tl))
运行的结果如下:
8027212646858338501
-4118419923444501110
Traceback (most recent call last):
File "C:/Users/Administrator/PycharmProjects/collections/abc111.py", line 19, in <module>
print(hash(tl))
TypeError: unhashable type: 'list'