字典介绍:
1,字典和列表一样都具有索引,只不过列表的索引是哈希函数生成的,列表的索引是数字(它本身暗示了数据的某种顺序)而已。
2,要知道列表是c语言之中的数组实现的,列表是动态的数组,而元组则是静态的数组
3,字典或集合默认的最小长度是 8(也就是说,即使你只保存 3 个值, Python 仍然会分配 8 个元素)。每次改变大小时,桶的个数增加到原来的 4 倍,直至达到 50000个元素,之后每次增加到原来的 2 倍
字典插入数据:
1,使用字典当我们插入数据时,首先需要计算键的散列值并掩码(内存之中的索引值)来得到一个有效的数组索引(也说明为什么是无序的)。
2,我们需要检查这个地址是否已经被使用。如果它是空桶,我们可以将键和值插入这一内存块。如果地址已经被使用,且地址内的值跟我们希望插入的值相等(使用内建的 cmp进行比较),说明这一键值对已经保存于散列表中,我们可以直接返回
3,如果值不相等,那么我们需要找到一个新的位置来保存数据,为了找到新的索引,我们用一个简单的线性函数计算出一个新的索引,这一方法称为嗅探.
4,Python 的嗅探机制使用了原始散列值的高位比特,使用这些高位比特使得每一个散列值生成的下一可用散列序列都是不同的,这样就能帮助防止未来的碰撞.
字典通过键寻找数据:
1,通过键来查找数据,给出的键会被转化为一个索引进行检索。如果和该索引指向的位置中的键符合(在插入操作时我们会保存原始的键),那么我们就会返回那个值。
2,如果不符合,我们用同一个方案继续创建新的索引,直至我们找到数据或找到一个空桶。
3,如果我们找到一个空桶,我们就可以认为表里不存在该数据。