先来举个例子说明下del的用法:
del 对象的引用
class Dog:
pass
dog1 = Dog()
dog2 = dog1
del dog1
如图所示:
删除对象的意思就是这个对象所对应的内存空间被释放了
当dog1被删除了,dog2还在,引用计数减掉1而已,内存还不会被释放
实例1:
class Dog:
def __del__(self): #当内存不需要的时候调用这个删除方法,python解释器自动调用
print(“英雄over”)
dog1=Dog() #创建一个对象
dog2=dog1
del dog1
del dog2
print(“==========”)
得到的结果为:
print(“英雄over”)
print(“==========”)
因为两个对象的引用都删除了,则内存空间被释放,会调用__del__方法
然后再输出======
实例2:class Dog:
def __del__(self): #当内存不需要的时候调用这个删除方法,python解释器自动调用
print(“英雄over”)
dog1=Dog() #创建一个对象
dog2=dog1
del dog1
print(“==========”)
得到的结果为:
print(“==========”)
print(“英雄over”)
当删除了dog1,内存空间还没有结束,还不会调用__del__方法,当调用完最后一条语句时,内存空间被释放,调用__del__方法
测量对象引用的个数:
import sys
sys.getrefcount(引用的对象)
实例:
class T:
pass
t=T()
tt=t
sys.getrefcount(t)
得到的结果为3,实际的引用个数为2,会比实际的个数多1
注:删除掉的对象引用,是不能拿来当sys.getrefcount()中的参数的