根据键查找“键值对”的底层过程
当我们调用a.get(“name”),就是根据键“name”查找到“键值对”,从而找到值
对象“gaoqi”。
1.计算“name”对象的散列值:
>>> bin(hash("name"))
'-0b1010111101001110110101100100101'
2.假设数组长度为8
3.拿计算出的散列值的最右边3 位数字作为偏移量,即“101”,十进制是数字5
4.我们查看偏移量5,对应的bucket 是否为空。如果为空,则返回None。如果不为空,则将这个bucket 的键对象计算对应散列值,和我们的散列值进行比较,如果相等。则将对应“值对象”返回。如果不相等,则再依次取其他几位数字,重新计算偏移量。
5.依次取完后,仍然没有找到。则返回None。
用法总结:
1. 键必须可散列
(1) 数字、字符串、元组,都是可散列的。
(2) 自定义对象需要支持下面三点:
1 支持hash()函数
2 支持通过__eq__()方法检测相等性。
3 若a==b 为真,则hash(a)==hash(b)也为真。
2. 字典在内存中开销巨大,典型的空间换时间。
3. 键查询速度很快
4. 往字典里面添加新建可能导致扩容,导致散列表中键的次序变化。因此,不要在遍历字
典的同时进行字典的修改。(建议先遍历,取出需要修改的,再修改)