__del__() 方法用于销毁Python对象——在任何Python对象将被系统回收的时候,系统都会自动调用这个方法。但是不要以为对一个变量执行del操作,该变量引用的对象就会被回收,当然不是,如果有多个变量引用它,del其中一个变量是不会回收该对象的。

栗子如下:

 #coding=utf-8
class Item:
def __init__(self,name,price):
self.name=name
self.price=price
def __del__(self):
print('del方法删除对象')
#创建一个Item对象,将之赋值给it变量
it = Item('鼠标',29.8)
x = it
#打印it所引用的Item对象
del it
print('----------')

控制台打印如下:

解释:第6、7行代码重写了Item类的__del__() 方法,当系统将要回收Item时,系统会自动调用Item对象的__del__() 方法。上面的程序先创建了一个Item对象并将该对象赋值给变量it,第10行代码又将it赋值给x,所以程序中有两个变量引用了Item对象,然后程序执行del it 删除it对象,此时由于还有变量引用该Item对象,因此程序并不会回收Item对象。所以会看到如上面的输出结果,为什么会这样?因为del it 之后,程序并没有回收Item对象,只有等到程序即将结束时(系统必须回收所有对象),系统才会回收Item对象。如果将第10行代码注释,打印如下:

解释:注释之后,当程序执行del it ,此时程序中不再有任何变量引用Item对象,因此系统会立即回收该对象,不需要等到程序结束前。

最新文章

  1. bzoj4260
  2. Oracle 11g RAC停止和启动步骤
  3. 关于android截图的一些方法
  4. js获取新浪天气接口
  5. iOS 关于iOS开发中的delegate
  6. android adb shell
  7. 【HTML/XML 8】XSL,可扩展样式表语言
  8. VS2010 打包问题汇总
  9. redis 删除大key集合的方法
  10. WinCE平台的程序编译到Win32平台下运行
  11. 搭建C++环境
  12. STM32应用实例七:与宇电设备实现AI-BUS通讯
  13. java一些常用并发工具示例
  14. 定时任务中的备份不同的数据库中的所有的表,每个表使用单独的sql备份文件
  15. 1135: [POI2009]Lyz
  16. 『HTML5挑战经典』是英雄就下100层-开源讲座(一)从天而降的英雄
  17. c# 依赖注入之---反射(转)
  18. checkBox1_CheckedChanged(object sender, EventArgs e)和checkBox1_CheckStateChanged(object sender, EventArgs e)不同
  19. LightOJ 1269 - Consecutive Sum Trie树
  20. [uva11997]k个最小和

热门文章

  1. LinuxShell脚本——选择结构
  2. springboot服务的一些问题
  3. C++ static静态成员
  4. MySQL 部署 MHA 高可用架构 (一)
  5. [前端] js中call方法的理解和思考
  6. Centos系统配置bond0
  7. mysql autocommit
  8. cookie:
  9. zz“老司机”成长之路:自动驾驶车辆调试实践
  10. CentOS7 部署 Django 项目