Python Hashtable的理解

       一个对象当其生命周期内的hash值不发生改变,而且可以跟其他对象进行比较时,这个对象就是Hashtable的。两者Hashtable的对象只有具有相同的hash值时才能判断为相同的对象。

  1.      python中的基本类型都是Hashtable,比如str,bytes,数字类型等;
  2. 用户自定义的类型默认情况下都是hashtable,因为他们的hash值就是他们的id()值;
  3. frozenset始终都是hashtable的,因为他们所有的项目都是被定义成hashtable的;
  4. 只有当元组内的所有项都是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'

posted @ 2017-04-20 09:15  廖飞  阅读(2330)  评论(0编辑  收藏  举报