《流畅的Python》Data Structures--第3章 dict 和 set

dict and set

字典数据活跃在所有的python程序背后,即使你的源码里并没有直接使用它。

和dict有关的内置函数在模块builtins的__dict__内。

>>> __builtins__
<module 'builtins' (built-in)>
>>> __builtins__.__dict__

 

dict之所以在python中起到至关重要的作用,是因为Hash table。

本章内容:

  • 常见方法
  • 如何处理找不到的key
  • dict变种
  • set, frozenset
  • Hash table 工作原理
  • hash table的潜在影响。

 

 Generic Mapping Types

标准库中所有的映射类型都是利用dict来实现。

key必须是hashable的数据类型。

 

什么是Hashable?

  • 如果说一个对象是hashable,那么在这个对象的整个生命中,它的hash value是不可变的。__hash__()
  • 这个对象可以和其他对象进行比较。__eq__()

根据这个定义,str, bytes, 数值类都是hashable的。元祖的所有元素都是hashable的话,元祖也是hashable。

>>> a = {}
>>> hash(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
>>> a = []
>>> hash(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> a = (1, 2, (1, 2))
>>> hash(a)
-1429464707349485113
>>> a = "hello"
>>> hash(a)
1326837820661389949

 

使用hash()可知一个对象是否是hashable。

 

 

 

 

 

 

 

 

上一篇:InnoDB架构浅谈


下一篇:【科研狗看论文】第三周(11.13-11.20)关于bloom filter