大家好,我是小眼睛优粥面,我想大家在面试Python的时候都会刷到过这样一道题:“请您谈一下Python的垃圾回收机制”,网上一句话概述了整个垃圾回收机制的原理:引用计数器为主,标记清除、分代回收为辅。好的,谈到这里说明你刷过一些Python面试题了,这个时候好奇的面试官肯定不是想就听到这点内容,接下来就有了以下对话:
面试官:你跟我介绍下分代回收和缓存原理吧?
我:......
面试官:那你说一下引用计数原理吧?
我:就是引用了+1,不引用-1,到0了回收......
面试官:好的,你回去等消息吧。(你被淘汰了......)
好的,为了避免这样的问题发生,今天我们就来详细谈一谈上面的所有问题,从引用计数器开始聊起。垃圾回收三部曲剩下两篇地址:标记清除和分代回收、缓存机制
欢迎大家交流分享(码字不易,希望大家标明出处),有不对的地方也请大家指正,万分感谢啦^ ^ ,也希望大家关注我的微信公众号 “记不住先生和忘不了小姐”,里面不光有 “记不住” 的技术还有那 “忘不了” 的情怀。
1. 环状双向链表refchain
再聊引用计数器之前,我们要先认识一个概念refchain,叫 “环状双向链表”,在python中创建的 “任何对象” 都会被放到这个双向链表中,可以说,你得到了这个双向链表,即你得到了python中的所有东西。这个双向链表大概就长成下面这个样子吧。
name = "Jeeven"
age = 18
sex = Man
country = China
city = Beijing
occupation = student
了解了这个概念,你可能会想:不同类型的数据创建的时候都放在这个链表中吗?放到这个链表中的数据结构是否一样呢?那我们从python的源码开始了解吧。