Python垃圾回收机制与del语句深度解析

键盘旁的猫
键盘旁的猫
发布时间:2026-10-13 | 5人浏览过
原创

本文深入解析Python基于引用计数的垃圾回收机制,阐明del语句并非直接删除内存对象,而是减少引用计数。通过示例说明变量重赋值与del操作对字符串对象引用的影响,并介绍如何通过重载__del__方法自定义对象销毁时的清理逻辑,帮助开发者掌握Python内存管理的核心原理。

Python采用的垃圾回收算法核心是引用计数。当某个对象的引用计数降为0时,Python解释器的垃圾回收机制会自动将该对象从内存中回收。

a = "larry"
b = a

以字符串对象“larry”为例,在第一行代码执行后,变量a指向该对象,此时其引用计数为1。当执行第二行代码将变量b也指向该对象时,该字符串对象的引用计数变为2。

a = "larry"
b = a
del a

需要明确的是,在Python中执行del语句操作某个对象时,并非直接在内存中物理删除该对象,而是将该对象对应的引用计数减1。

>>> a = "larry"
>>> b = a
>>> del a
>>> id(b)
4572141808
>>> id(a)
Traceback (most recent call last):
 File "<input>", line 1, in <module>
  id(a)
NameError: name 'a' is not defined

结合上述示例分析:字符串对象“larry”在第一行被变量a引用,引用计数为1;第二行被变量b引用后,引用计数增至2。第三行执行del a后,虽然变量a被删除,但通过后续print语句观察可知,内存中实际的字符串对象依然存在。del语句仅删除了变量a对该对象的引用,因此对于“larry”对象而言,其效果仅仅是引用计数减1。

魔法函数之__del__

类定义中的__del__魔法函数允许开发者自定义对象清理逻辑。当Python解释器使用del语句删除类的实例时,会自动调用该类中的__del__方法,开发者可以对此方法进行重载以实现特定功能。

>>> class Ref:
...
...   def __init__(self, name):
...     self.name = name
...
...   def __del__(self):
...     print("删除对象")
...     del self.name
...
>>>
>>> r = Ref(name="larry")
>>> print(r.name)
larry
>>>
>>> del r

删除对象

>>>
>>> print(r.name)
Traceback (most recent call last):
 File "<input>", line 1, in <module>
  print(r.name)
NameError: name 'r' is not defined

通过重载__del__魔法函数,开发者可以灵活控制在使用del语句删除对象时执行哪些具体的善后操作。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表