python 垃圾回收

任何对象,当引用计数变为0的时候都会被立刻清除。

而对象,分为可变对象,和不可变对象,不可变对象有个特点:其内部不包含指向其他对象的引用。而可变对象,比如列表[1,2],他内部包含两个整数对象的引用。也可以说,列表对象[1,2]引用了整数对象1和整数对象2

 

所以,根据以上特点,不可变对象不可能产生循环引用。所谓循环引用就是对象a引用了对象b,对象b又引用了对象a。a和b之间就是循环引用

 

例如:

1 a = [1,2]
2 b = [3,4]
3 a.append(b)
4 b.append(a)#到处,a和b的引用计数都是2

上面的例子很重要,a,b所引用的对象的引用计数均为2,拿a所引用的对象来说来说,他除了被a引用,还被b所引用的对象所引用。

 

del a#到此,原来a所引用的对象现在只被b所引用的对象所引用,引用计数为1
del b #到处,原来b所引用的对象现在只被原来的a所引用的对象所引用,引用计数为1
posted @ 2018-02-02 03:26  扫驴  阅读(129)  评论(0编辑  收藏  举报