任何对象,当引用计数变为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