来自: <<python源码剖析>>
Hash方案
散列表+开放定址法
创建PyDictObject
先从对象缓冲池中取, 若没有, 则创建, 同时创建存储数据的表small_table[8]
数据对象PyDictEntry
有三种状态, unused, active, dummy.
dummy的作用: 删除数据时, 并不真的删除(伪删除), 标记为dummy状态. 目的: hash查找时, 保持连续.
查找策略
提供lookdict和lookdict_string两种查找方法. 最终返回的都是PyDictObject.
lookdict_string: 当查询的key为string时, 触发此方法, 与hash中实体存储的key类型无关.
lookdict_string意义: python本身大量使用PyDictObject.
缓冲池
PyDictObject对象销毁时, 将其加入缓冲池.
若缓冲池已满, 则销毁此对象.