Python中的常见特殊方法—— del方法

__del__() 方法用于销毁Python对象——在任何Python对象将被系统回收的时候,系统都会自动调用这个方法。但是不要以为对一个变量执行del操作,该变量引用的对象就会被回收,当然不是,如果有多个变量引用它,del其中一个变量是不会回收该对象的。

栗子如下:

 1 #coding=utf-8
 2 class Item:
 3     def __init__(self,name,price):
 4         self.name=name
 5         self.price=price
 6     def __del__(self):
 7         print('del方法删除对象')
 8 #创建一个Item对象,将之赋值给it变量
 9 it = Item('鼠标',29.8)
10 x = it
11 #打印it所引用的Item对象
12 del it
13 print('----------')

控制台打印如下:

Python中的常见特殊方法—— del方法

解释:第6、7行代码重写了Item类的__del__() 方法,当系统将要回收Item时,系统会自动调用Item对象的__del__() 方法。上面的程序先创建了一个Item对象并将该对象赋值给变量it,第10行代码又将it赋值给x,所以程序中有两个变量引用了Item对象,然后程序执行del it 删除it对象,此时由于还有变量引用该Item对象,因此程序并不会回收Item对象。所以会看到如上面的输出结果,为什么会这样?因为del it 之后,程序并没有回收Item对象,只有等到程序即将结束时(系统必须回收所有对象),系统才会回收Item对象。如果将第10行代码注释,打印如下:

Python中的常见特殊方法—— del方法

解释:注释之后,当程序执行del it ,此时程序中不再有任何变量引用Item对象,因此系统会立即回收该对象,不需要等到程序结束前。