python del与垃圾回收

冒出来一个念头. Python del 对象时,会自动调用__del__方法。那么垃圾回收的时候,是否python也会在删除对象前,调用__del__方法呢?结论是不会,模拟了一个例子,便看到答案了。可是为什么呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
class XX:
def __init__(self):
print('xxx init')

def __del__(self):
print('yyy del')


a = XX()
del a
XX() //创建了一个变量, 但是没有引用指向,我以为python 垃圾回收机制回收时,会答应出 yyy del. 结果并没有。
import gc
gc.collect() //强制gc一次,也没见到调用
  • del 命令删除的实际上对象的引用。但是删除前会调用__del__,完成方法里定义的善后工作。

  • python的垃圾回收,删除的是引用计数。所以并不会调用__del__方法

Author: Chandler Kwok
Link: http://yoursite.com/2020/06/07/python-del%E4%B8%8E%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.