文章

随笔

45. Set 是如何工作的(1)

Set 的功能其实与 Dict 的 Key 非常相似: 不可重复; 需要快速查找; 一些文章中认为 Set 是 Value 为空的 Dict,在逻辑上大体没问题,但具体实现还是有很大区别的。 PySetObject 的结 …

阅读全文
随笔

44. TupleObject 是怎样工作的?

TupleObject 是 Python 中另外一种常用对象,尤其是赋予了函数返回多个对象的能力。Tuple 可以看作是 “只读” 版本的 List,在最底层的 Object 数组操作上二者有异曲同工之妙,加上 …

阅读全文
随笔

43. Dict 的缓存技术

Python 中大量使用了小 Dict 对象,与前面提到的一些基本类型类似,除了利用内存池提高内存分配的效率,Dict 也实现了 Dict 结构体的缓存池,实现对 Dict 结构体的复用,其定义: 可以看到 Dict 的 …

阅读全文
随笔

42. Dict 的内存伸缩

目前已经对 Dict 的增查改删有了比较清晰的认识,对 Dict 的增删环节一直有一个细节没有澄清: dk entries 是如何伸缩的? 对 Dict 的内存伸缩过程理解了,才能真正搞清 dict.keys() 的顺序 …

阅读全文
随笔

40. Dict 是如何工作的(4)删除 K-V

删除字典中的 K V 是更新字典最常用的操作,与设置已有 K V 类似,在执行一切操作之前,需要先找到目标 dk entries。我们知道字典的搜索函数是一个指针,以便在不同时期切换合适的搜索函数。通过搜索函数找到目标 …

阅读全文
随笔

38. Dict 是如何工作的(2)查找元素

前一节以一个非常简单的例子,了解想 Dict 插入 K V 的过程,简而言之: dk indices 作为哈希表实现快速查询 Key; dk entries 是 K V 真实的栖身之所,就是一个数组; 哈希表中可能出现碰 …

阅读全文
随笔

37. Dict 是如何工作的(1)

上一节大致搞清楚了 Dict Object 的结构, 相比 《源码剖析》中陈儒先生研究的 2.5 版本,最新的 3.8 版本字典结构稍显复杂。不过,无论 Dict 的结构如何变化,其核心逻辑没有发生本质变化。今天剖析 …

阅读全文
随笔

36. Dict 的构造

需要注意的是 3.8 版本实现中,Dict 的结构较之前版本有一些调整。 其中 PyObject HEAD 是所有 Python 对象必备的元信息;ma version tag 会随着对 Dict 类的操作而自增,表示是 …

阅读全文