a = 1
id(a) == id(1)
每次退出ipython重新进入,这个Id都会不一样
sys.getrefcount(a) 可以计数某个对象的引用次数,是原来的次数+1
垃圾回收
使用gc包 garbage collector
gc.collect() 手动垃圾回收
一般是自动垃圾回收,分配对象和取消分配对象差值高于某个阈值的时候才会回收垃圾,
使用函数gc.get_threshold() 获得阈值,默认为(700, 10, 10),后两个是分代回收的参数
分代回收的意义在于,越是长久的对象,我们越认为会存在更久,分为0代, 1代,2代三种
如果对象经过一次回收没有被回收,那么上升一代,(10, 10)的意思是,经过10次0代回收会进行一次1代回收,经过10次1代回收会进行一次2代回收
孤立的引用环的回收机制:
1、首先得到每个对象的引用次数
2、对每个对象i, 找到i引用的对象j,将j的引用次数减1
3、如果ref次数为0,除非引用别人或者更下游有引用,否则当作垃圾回收