目前包括 部分底层架构,运行原理。

了解 ==熟悉== 掌握 精通
* 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
    提高效率。
    分成三代,新代多扫描,老代少扫描