Python内置数据结构和算法 学习笔记

Python中collections模块提供的一些内置数据结构拓展

注:有空看看源码实现原理

  1. nametuple()(创建命名元组子类的工厂函数)
  2. deque类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop)
  3. Counter字典的子类,提供了可哈希对象的计数功能
  4. OrderedDict字典的子类,保存了他们被添加的顺序
  5. defaultdict字典的子类,提供了一个工厂函数,为字典查询提供一个默认值
    更多参考:python内置模块

Python dict底层结构

dict底层使用了哈希表

  1. 为了支持快速查找使用哈希表作为底层
  2. 哈希表平均查找时间复杂度O(1)
  3. CPython解释器使用二次探查解决哈希冲突问题
  4. 解决哈希冲突
  5. 哈希扩容:HashMap的初始值是16(1,<<4),负载因子0.75(听说这个值是经过大量实践算出来的,这个值设定最合理),初始值16指的是数组的长度(1<<4是2的4次方,这样写计算机执行更快),当数组的容量达到12(16*0.75)时,这时开始扩容,扩容为32(1<<5即2的5次方),每次扩容按照2的倍数递增,扩容是为了减少hash碰撞,让链表的数据更少(最好链表上就一个数据,即为数组的下标数据)

Python中list/tuple区别

  1. 都是线性结构、支持下标访问
  2. list是可变对象,tuple是保存的引用不可变,比如tuple中包容可变对象,如list,函数对list修改了,内容是会改变的
  3. list没有办法作为字典的key,tuple可以(可变对象不可hash),因为list有可能因为添加新的元素而导致内存地址的更换
发布了15 篇原创文章 · 获赞 4 · 访问量 1036

猜你喜欢

转载自blog.csdn.net/qq_37316153/article/details/104255615