字典核心底层原理

字典对象的核心是一个散列表,散列表是一个系数数组(总是有空白元素的数组)。数组的每个单元叫做bucket,每个bucket包含两个部分:一个是键对对象的引用,一个是指对对对象的引用。

由于所有的bucket大小一样,我们可以通过偏移量来读取指定的bucket。

0 key1 value1
1    
2 key2 value2
3    
4    
5 key4 value4

 

 

 

 

 

 

 

将一个键值放入字典的底层过程

假设a对象创建完后数组的长度为8

我们要把“name” = "Xujie"这个键值放到字典的对象a中,首先第一步需要计算键“name”的散列值,Python中可以通过hash()来计算

1 >>> bin(hash("name"))
2 '0b100010111111000001110101111010'

由于数组长度为8,我们可以拿计算出的散列值的最右边3位数字作为偏移量,即“010”我们查看偏移量2对应的bucket是否为空,如果为空,则将键值对放入进去,如果不为空,则依次左移三位“111”,再查看偏移量7是否为空,直到找到对应的空位置放下去