目前包括 部分底层架构,运行原理。
了解 ==熟悉== 掌握 精通
* 2023年回看也没有多进阶……
dict 底层
python的dict底层为hash表。
如何解决冲突
- 链接:将元素插入到链表
- 再哈希:有多个hash函数使用剩余的hash函数
- 二次探测:线性:顺着往后找第一个空的。 二次探测:往后找index的平方,index递增
如何扩容
- if has loaderFactor
- if not: lens longer than its capacity and hash collision
内存管理 | memory managed
有三种方式,一起管理。
1. 内存池
256k以下单独分配内存 申请和释放。减少内存碎片产生,提升效率。
2. 引用计数 | reference count
3. 垃圾回收:
-
引用计数
引用计数缺点:互相引用时count无法归0 -
标记清除 | mark-sweep
用来解决引用计数机制产生的循环引用,进而导致内存泄漏的问题 。 循环引用只有在容器对象才会产生,比如字典,元组,列表等。-
标记阶段,遍历所有的对象,如果是可达的(reachable),也就是还有对象引用它,那么就标记该对象为可达
-
清除阶段,再次遍历对象,如果发现某个对象没有标记为可达(即为Unreachable),则就将其回收
-
-
分代回收 | generational-collection
提高效率。
分成三代,新代多扫描,老代少扫描