python的引用计数分析(二)
python所有对象引用计数被减少1的情况:
一.对象的别名被赋予新的对象;
a = 23345455 # 增加了一个引用 b = a # 增加了一个引用 print(sys.getrefcount(a)) b = 1.4 # 减少了一个23345455整数的引用 print(sys.getrefcount(a))
结果:3;2
二.对象的别名被显式销毁;
a = 23345455 # 增加了一个引用 b = a # 增加了一个引用 list = [a, b] # 增加了2个引用 del a print(sys.getrefcount(b))
结果:4
说明:直接使用del关键字或者del()函数;注意:上述代码手动销毁的是被赋值引用的a,但是在列表里的a不会被销毁。
三.一个对象离开它的作用域;
a = 23345455 # 增加了一个引用 b = a # 增加了一个引用 print(sys.getrefcount(a)) # 执行完毕后引用销毁 print(sys.getrefcount(a))
结果:3;3
说明:a作为参数传递到sys.getrefcount(a)函数中,只在函数中起作用,一旦执行完毕就会销毁。
四.对象所在的容器被销毁,或从容器中删除对象;
# 增加了一个引用 a = 23345455 # 增加了一个引用 b = a list = [a, b] # 增加了2个引用 del list print(sys.getrefcount(b))
结果:3
所有的引用计数加一的情况: python的引用计数分析(一)