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

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

本文深入解析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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。