Python类对象销毁的3种情况,python函数的用法

  Python类对象销毁的3种情况,python函数的用法

  与init()方法相对应的是__del__()方法。__init__()方法用于初始化Python对象,而_ _ del _()方法用于销毁Python对象,即当任何一个Python对象即将被系统回收时,系统都会自动调用该对象的_ _ del _()方法。

  当程序不再需要Python对象时,系统必须释放该对象占用的内存空间。这个过程称为垃圾收集(GC)。Python会自动回收所有对象占用的内存空间,开发者不需要关心垃圾回收的过程。

  Python采用自动引用计数(ARC)来回收对象占用的空间。当程序中的变量引用Python对象时,

  Python会自动保证这个对象的引用计数为1;当程序中有两个变量引用Python对象时,Python会自动保证对象的引用计数为2,

  以此类推,如果一个对象的引用计数变成0,说明程序中不再有引用该对象的变量,说明程序不再需要该对象。

  所以Python会回收对象。很多时候,Python的ARC可以准确高效地回收系统中的每一个对象。但如果系统中存在循环引用,比如对象A保存一个实例变量引用对象B,对象B保存另一个实例变量引用对象A,此时两个对象的引用计数都是1,但实际上程序中已经没有更多的变量引用它们了,所以系统应该回收它们。这时候Python的垃圾收集器可能就没那么快了,需要等待专门的循环垃圾收集器来检测回收这个参考循环。

  当一个对象被垃圾回收时,Python会自动调用该对象的__del__方法。需要注意的是,你不应该假设一个变量引用的对象会通过对它执行del操作而被回收。只有当对象的引用计数变为0时,对象才会被回收。因此,如果一个对象有多个引用它的变量,那么del中的一个变量就不会回收这个对象。

  类别项目:

  def__init__(自身,姓名,价格):

  self.name=name

  self.price=价格

  #定义析构函数

  def__del__(self):

  打印(“删除删除对象”)

  #创建一个Item对象,并将其赋给im变量

  Im=Item(鼠标,29.8)

  x=im#

  #打印im引用的项目对象

  填入名称

  在print ( -)程序中重写了Item类的__del__()方法,它是Item类的析构函数。当系统要回收该项时,系统会自动调用Item对象的_ _ del _()方法。

  上面的程序先创建一个Item对象并赋给im变量,代码将im赋给变量X,这样程序中的两个变量就引用了Item对象。接下来,程序执行del im代码来删除im对象。此时,程序不会回收Item对象,因为还有其他变量引用Item对象。

  运行上面的程序,您可以看到以下输出结果:

  -

  Del对象删除从上面程序的输出结果可以看出,执行del im后,程序并不回收Item对象。只有当程序执行即将结束时(系统必须回收所有对象),系统才会回收Item对象。

  如果将程序中的代码注释掉,再次运行上述程序,将会看到以下输出结果:

  删除删除对象

  -代码被注释掉后,程序执行del im时,此时程序中已经没有变量引用Item对象了,所以系统会立即回收该对象,所以不需要等到程序结束。

  后面需要注意的是,如果父类提供了__del__()方法,那么系统在重写__del_()方法时必须显式调用父类的__del__()方法,以保证父类实例的某些属性能够被合理恢复。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: