python源码深度剖析_Python 源码深度剖析
·
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等对象,学习建议以最新版本源码为准。
更多推荐
所有评论(0)