以float类型分析,其对应产生的pyFloatOjbect结构体。当val=3.14都会执行C语言的源码函数。先调用free_list。但是起始的时候free_list是空的,所以根据pyFloatOjbect去开辟内存,但是还没任何的值,然后初始化把内存地址放入,,然后把赋值3.14,返回这个对象的指针。赋值next,prev ob_refcnf +1 , 加入refchain中。如果free_list有值,则获取这个指针地址,赋值给float,不再开辟内存。
以list也是添加到free_list。开辟内存,根据结构体赋值然后给refchain链表中,如果此时free_list没满80。则加入free_list,同时free_list数目+1。还加入维护可能存在计数器循环引用的链表,加入0代。经过一段时间后,0代达到例如700,即达到阀值,则扫描一次,存在相互引用则-1,如果还有其他变量等引用,则保留,但是如果0代满700,则加入1代。扫描的时候复制出一份即由ob_refcnf 新增出gc_refcnf。之后操作gc_refcnf。核心是否达到阈值。