python的垃圾回收机制和析构函数__del__

本文详细介绍了Python中析构函数__del__的定义、调用时机及作用,包括显式调用和作用域结束时的自动调用。同时,深入探讨了Python的垃圾回收机制,包括引用计数算法和如何使用gc模块进行资源释放。

析构函数__del__定义:在类里定义,如果不定义,Python 会在后台提供默认析构函数。

析构函数__del__调用

A、使用del 显式的调用析构函数删除对象时:del对象名;                             

        class Foo:
        def __init__(self,x):
        self.x=x
        def __del__(self): #在对象资源被释放时触发
        print('-----del------')
        print(self)
        f=Foo(100000)
        del f

 B、当对象在某个作用域中调用完毕,跳出其作用域的同时析构函数也会被调用一次,这样可以用来释放内存空间。

class Foo:
  def __init__(self,x):
  self.x=x
def __del__(self): #在对象资源被释放时触发
  print('-----del------')
print(self)
f=Foo(100000)
time.sleep(5) #time.sleep(5)执行完后,自动调用__del__()
 
注意:__del__只是删除了对象的引用,比如上面del f 只是f对象不再执行实例数据的存储空间了,实例数据并没有被删除,删除实例数据需要python本身的垃圾回收机制;
 
垃圾回收机制
Python 采用垃圾回收机制来清理不再使用的对象;Python 提供gc模块释放
不再使用的对象,Python 采用‘引用计数’ 的算法方式来处理回收,
即:当某个对象在其作用域内不再被其他对象引用的时候,Python 就自动清除对象;
Python 的函数collect()可以一次性收集所有待处理的对象(gc.collect())

 

转载于:https://www.cnblogs.com/yoyo008/p/9602962.html

### Python 中构造函数 `__init__` 析构函数 `__del__` 的使用方法与区别 #### 使用方法 - **构造函数 `__init__`** 构造函数是一个特殊的类方法,在创建类的实例时自动调用。它的主要作用是对新创建的对象进行初始化操作,比如设置初始状态或分配资源。通常会在其中定义并赋值对象的属性[^1]。 ```python class Person: def __init__(self, name, age): self.name = name # 初始化name属性 self.age = age # 初始化age属性 person_instance = Person("Alice", 25) print(person_instance.name) # 输出 Alice ``` - **析构函数 `__del__`** 析构函数是在对象被销毁之前由解释器自动调用的一个特殊方法。它主要用于释放对象占用的资源或者执行一些清理工作。需要注意的是,Python垃圾回收机制决定了何时调用此方法,因此无法精确控制其触发时间[^2]。 ```python class FileHandler: def __init__(self, filename): self.filename = filename print(f"{filename} 文件已打开") def __del__(self): print(f"{self.filename} 文件已关闭") file_handler = FileHandler("example.txt") # example.txt 文件已打开 del file_handler # example.txt 文件已关闭 ``` #### 主要区别 | 特性 | 构造函数 `__init__` | 析构函数 `__del__` | |-----------------|---------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------| | 调用时机 | 对象创建时立即调用 | 对象即将被销毁前调用 | | 功能 | 初始化新建对象的状态,例如设定属性值 | 清理不再需要的资源 | | 参数支持 | 可接受多个参数用于配置对象 | 不接收任何额外参数 | | 控制权 | 开发者可以显式通过传参影响行为 | 行为受 Python 垃圾收集机制管理 | #### 注意事项 尽管可以通过手动方式(如使用 `del` 关键字)促使某些情况下更快地触发 `__del__` 方法,但在多线程环境中可能会遇到不可预测的行为。此外,如果存在循环引用,则可能导致延迟甚至阻止 `__del__` 的正常运行[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值