qq_六月的古明地觉_0

一年前阅读过关于源码剖析的书, 不过是基于Python2.5的, 很高兴遇到了Python3.x的源码剖析, 正在对着源码一点一点剖析, 感谢老师出了这个专栏。

但还是遇到了一个问题, 记得您说: "那么,被删除的存储单元如何复用呢?Python 压根就没想费这个劲,直接使用新的不就好了吗?"。

不过我隐约记得之前在看那本书的时候, 记得书上画了一张图, 描述entry的unused态、active态、dummy态三者的关系。dummy态无法转为unused态, 但dummy态和active态的entry之间的关系是一个双向箭头。

可不可以这样理解,Python默认是不会管处于dummy态的entry的, 只是做了一个逻辑删除, 但是内存还在占用这。

如果来了一个新的entry, 并且没有发生冲突, 那么Python就存在新的位置上。但如果发生了冲突, 沿着"冲突探测链"查找的时候, 碰巧发现了一个处于dummy态的entry, 那么就把这个处于dummy态的entry给换成新存储的entry。

此时entry由dummy态变成了active态, 只不过此时不一定是同一个entry了。可以这样理解吗

讲师回答 / fasionchan

完全正确。dummy状态其实也是特殊的unused,之所以不能转成直接转成unused是因为需要维护冲突探测链。另外,Python 3内建对象与Python 2相比变化很大,特别是dict、str等对象,学习建议以最新版本源码为准。

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐