45. Set 是如何工作的(1)
Set 的功能其实与 Dict 的 Key 非常相似: 不可重复; 需要快速查找; 一些文章中认为 Set 是 Value 为空的 Dict,在逻辑上大体没问题,但具体实现还是有很大区别的。 PySetObject 的结 …
阅读全文Set 的功能其实与 Dict 的 Key 非常相似: 不可重复; 需要快速查找; 一些文章中认为 Set 是 Value 为空的 Dict,在逻辑上大体没问题,但具体实现还是有很大区别的。 PySetObject 的结 …
阅读全文TupleObject 是 Python 中另外一种常用对象,尤其是赋予了函数返回多个对象的能力。Tuple 可以看作是 “只读” 版本的 List,在最底层的 Object 数组操作上二者有异曲同工之妙,加上 …
阅读全文Python 中大量使用了小 Dict 对象,与前面提到的一些基本类型类似,除了利用内存池提高内存分配的效率,Dict 也实现了 Dict 结构体的缓存池,实现对 Dict 结构体的复用,其定义: 可以看到 Dict 的 …
阅读全文目前已经对 Dict 的增查改删有了比较清晰的认识,对 Dict 的增删环节一直有一个细节没有澄清: dk entries 是如何伸缩的? 对 Dict 的内存伸缩过程理解了,才能真正搞清 dict.keys() 的顺序 …
阅读全文最近在网上看到这样一个问题,大意是: is dic.items() == zip(dict.keys(), dict.values()) ? 这是一个有意思的问题,类似的问题还有: dict.keys() 和 …
阅读全文删除字典中的 K V 是更新字典最常用的操作,与设置已有 K V 类似,在执行一切操作之前,需要先找到目标 dk entries。我们知道字典的搜索函数是一个指针,以便在不同时期切换合适的搜索函数。通过搜索函数找到目标 …
阅读全文Dict 最重要的是 Key 的搜索,上一节已经大致搞清楚了搜索过程。Python 的搜索函数指针被保存在 ma keys dk lookup 中,而 dk lookup 可能的取值有: lookdict …
阅读全文前一节以一个非常简单的例子,了解想 Dict 插入 K V 的过程,简而言之: dk indices 作为哈希表实现快速查询 Key; dk entries 是 K V 真实的栖身之所,就是一个数组; 哈希表中可能出现碰 …
阅读全文上一节大致搞清楚了 Dict Object 的结构, 相比 《源码剖析》中陈儒先生研究的 2.5 版本,最新的 3.8 版本字典结构稍显复杂。不过,无论 Dict 的结构如何变化,其核心逻辑没有发生本质变化。今天剖析 …
阅读全文需要注意的是 3.8 版本实现中,Dict 的结构较之前版本有一些调整。 其中 PyObject HEAD 是所有 Python 对象必备的元信息;ma version tag 会随着对 Dict 类的操作而自增,表示是 …
阅读全文