Python中的垃圾回收算法是采用
引用计数
, 当一个对象的引用计数为0时, Python的垃圾回收机制就会将对象回收
1 | a = "larry" |
larry
这个字符串对象, 在第一行被贴了a
标签后, 引用计数为1, 之后在第二行, 由贴上了b
标签, 此时, 该字符串对象的引用计数为2
1 | a = "larry" |
注意: 在Python语言中, del
语句操作某个对象的时候, 并不是直接将该对象在内存中删除, 而是将该对象的引用计数-1
1 | "larry" a = |
从以上示例中可以看出, larry
这个字符串对象在第一行被贴上了a
标签, 此时字符串对象的引用计数为1, 接着第二行又被贴上了b
标签, 此时该字符串对象的引用计数为2, 在第三行中, del语言删除了a变量(标签), 在后续的print中可以看出, 内存中实际的字符串对象并没有被删除, del语言只是删除了一个变量对该字符串对象的引用, 所以对于larry
这个字符串对象来说, 效果只是引用计数-1
魔法函数之__del__
类中的__del__
魔法函数, 支持我们自定义清理对象的逻辑, 当Python解释器使用del语言删除类的对象的时候, 会自动调用类中的__del__
函数, 我们可以对其进行重载
1 | class Ref: |
我们可以通过重载__del__
魔法函数, 自己灵活控制在del 对象
的时候执行哪些善后操作