字典
内存空间
- 代码区:存储方法体的二进制代码。
 - 静态数据区:存储全局变量、静态变量、常量。
 - 动态数据区
- 栈区:由系统自动分配和回收,存放函数的局部变量、参数值、返回值等。使用一级缓存,调用时处于存储空间,调用完立即释放。
 - 堆区:由程序员分配释放。类似于链表,使用二级缓存,生命周期由虚拟机的垃圾回收算法来决定。
 
 
字典
- 
底层实现
- 
散列表(哈希表):稀疏数组。数组的每个单元叫bucket,bucket包括键对象的引用和值对象的引用两部分。
 - 
哈希函数:使键均匀分布在数组中,并且可以在内存中以O(1)的复杂度进行寻址,从而实现快速查找和修改。
 - 
哈希碰撞(冲突):由于不同的键可能具有相同的哈希值,就可能出现冲突。
 - 
建立哈希表
- 添加数据:将key通过哈希函数装换成一个整型数字,将该数字对数组长度取余,取余结果就是数组下标,将值存储在以该数字为下标的数组空间中。
 - 查询数据:使用哈希函数将key转换成对应的数组下标,直接定位所在位置的值。
 
 - 
哈希冲突解决
- 开放寻址法:当产生哈希冲突时,通过一个探测函数计算出下一个侯选位置,如果仍存在冲突,通过探测函数继续查找,直至找到位置来存储元素。
 - 链地址法:将哈希值相同的key都存放在同一线性链表中,按顺序遍历就可以找到。
 - 再哈希法:按顺序规定多个哈希函数,每次查询的时候按顺序调用哈希函数。
 
 - 
字典的键必须是可哈希的,虽然键查询速度快,但在内存中开销很大。
 
 - 
 - 
内置函数和方法
- len(dict):计算字典元素个数
 - str(dict):输出字典
 - dict.clear():删除字典内所有元素
 - dict.copy():返回一个字典的浅复制
 - dict.get(key,default=None):返回指定键的值,如果键不在返回默认值
 - key in dict:判断键是否在字典中
 - dict.items():以列表形式返回可遍历的(键,值)元组数组
 - dict.keys():返回一个迭代器,可以用list()来转换为列表
 - dict.values():返回一个迭代器,可以用list()来转换成列表
 - dict.update(dict1):将字典dict1的键值对更新到dict中
 - dict.setdefault(key,default=None):键不存在就会添加键并将值设为default
 
 
                    
                
                
            
        
浙公网安备 33010602011771号