例子一:
class B:
def __del__(self):
print(”内存被释放“)
b1 = B()
b2 = b1
print("hello world")
结果:
hello world #先打印
--------i am over------ #后打印
上面例子说明,程序结束时,python解释器会自动调用del方法
不管是手动调用del还是由python自动回收都会触发del方法执行
例子二:
class B:
def __del__(self):
print("--------i am over------")
b1 = B()
del b1
print("hello world")
结果:
--------i am over------
hello world
删除b1的时候,对象的引用计数器由1变为0,调用了del方法
例子三:
class B:
def __del__(self):
print("--------i am over------")
b1 = B()
b2 = b1
del b1
print("hello world")
结果:
hello world #先
--------i am over------ #后
b1 与 b2 都指向该内存对象,引用计数器为2,但是只删除了b1,所以引用计数变为1
最后程序结束,自动调用del 方法
例子四:
class B:
def __del__(self):
print("--------i am over------")
b1 = B()
b2 = b1
del b1
del b2
print("hello world")
结果:
--------i am over------
hello world
删除b1与b2,引用计数器归0
如何查看引用计数器数量
import sys
class B:
def __del__(self):
print("--------i am over------")
b1 = B()
print(sys.getrefcount(b1)) #2
b2 = b1
print(sys.getrefcount(b1)) #3
print(sys.getrefcount(b2)) #3
del b1
print(sys.getrefcount(b2)) #2
del b2
print("hello world")
使用sys.getrefcount() 方法来获取引用计数器的值,但该值会默认+1