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。