python源码分析 :整数对象的实现-2

接着上次《整数对象实现-1》来分析,python是怎么避免“内存泄漏”的。在上一章我们看到了,python的设计者使用了ob_type暂时作为为'next'指针将''整数堆中的每个整数对象串成单链表,然后由free_list索引。

回忆一下,单链表的操作!很简单了,只要每次释放后,就将''整数插入到单链表中。这样就可以在后面继续利用之了。但仔细一想,python执行一段时间后,其''整数堆中的整数可能不会像分配时那样按严格按照内存的先后顺序在单链表中存放,可能完全处理随机位置。

还有一个问题就是,由于python的这一设计,那么当我实现大量的整数时,并且不释放它,那么就有可能将内存吃光!是吧?

在改写了int_print这个函数,添加打印small_ints中的前十个数字的引用计数。发现一个奇特的现象:

当执行 i = 0后,0的引用计数增加的不是1而是3,反之执行 del i后,0的引用计数减少的不是1而是3。估计这与在shell中打开python解释执行器,其在中间进行了若干转换有关,但这仅仅是猜测,要想知道确认这一现象或者知道真实的原因,请看下回分析!

明白是怎么回事了,解释器要维护一个全局变量的字典,形成变量名与其值有一个一对一的映射关系。那也不对,字典的key'i'value0,那么还是只增加了引用一次。其它两次从哪儿来的呢?

发表评论