Python中的垃圾回收算法是采用引用计数, 当一个对象的引用计数为0时, Python的垃圾回收机制就会将对象回收

a = "larry"

b = a

larry这个字符串对象, 在第一行被贴了a标签后, 引用计数为1, 之后在第二行, 由贴上了b标签, 此时, 该字符串对象的引用计数为

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 "", line 1, in

id(a)

NameError: name 'a' is not defined

从以上示例中可以看出, larry这个字符串对象在第一行被贴上了a标签, 此时字符串对象的引用计数为1, 接着第二行又被贴上了b标签, 此时该字符串对象的引用计数为2, 在第三行中, del语言删除了a变量(标签), 在后续的print中可以看出, 内存中实际的字符串对象并没有被删除, del语言只是删除了一个变量对该字符串对象的引用, 所以对于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 "", line 1, in

print(r.name)

NameError: name 'r' is not defined

我们可以通过重载__del__魔法函数, 自己灵活控制在del 对象的时候执行哪些善后操作

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

python可以用del释放资源_Python中垃圾回收和del语句详解相关推荐

  1. python的常量和变量_python中的常量和变量代码详解

    局部和全局变量: # name='lhf' # def change_name(): # # global name # name='帅了一比' # print('change_name',name) ...

  2. python向量机使用方法_Python中支持向量机SVM的使用方法详解

    除了在Matlab中使用PRTools工具箱中的svm算法,Python中一样可以使用支持向量机做分类.因为Python中的sklearn库也集成了SVM算法,本文的运行环境是Pycharm. 一.导 ...

  3. python类定义以及调用_python中如何定义和调用类详解

    类的方法的定义 1.def fun_name(self,...); Pass 2.其中的参数self代表类的实例,在调用方法时由系统自动提供 3.方法定义时必须指明self参数 类的方法的调用 与普通 ...

  4. python中列表的sort方法_python中列表的sort方法使用详解

    内容简介:python中列表的sort方法使用详解 一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的. 排序,数字.字符 ...

  5. python format函数实例_python中强大的format函数实例详解

    python中format函数用于字符串的格式化 自python2.6开始,新增了一种格式化字符串的函数str.format(),此函数可以快速处理各种字符串. 语法 它通过{}和:来代替%. 请看下 ...

  6. python支持向量机回归_Python中支持向量机SVM的使用方法详解

    除了在Matlab中使用PRTools工具箱中的svm算法,Python中一样可以使用支持向量机做分类.因为Python中的sklearn库也集成了SVM算法,本文的运行环境是Pycharm. 一.导 ...

  7. python中mat函数_Python中flatten( )函数及函数用法详解

    flatten()函数用法 flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组. flatten只能适用于numpy对象,即array或者mat,普通的list列 ...

  8. python中seek(10、1)_Python中index()和seek()的用法(详解)

    1.index() 一般用处是在序列中检索参数并返回第一次出现的索引,没找到就会报错,比如: >>> t=tuple('Allen') >>> t ('A', 'l ...

  9. python中update是啥意思_python中update的基本使用方法详解

    前言 Python 字典 update()方法用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中. 语法格式 d.update(e) 参数说明 将e中键-值对添加到字典 ...

最新文章

  1. 对 VR 项目开发流程的调研
  2. WPF 使用DMSkin for WPF 快速搭建漂亮的WPF程序
  3. Git账号以及TortoiseGit配置
  4. 开发外包注意事项——iOS APP的开发
  5. python定时发送信息_python实现定时发送消息
  6. 河南省高考让不让带计算机,河南高考2018严禁携带的东西有哪些?这种衣服不能进考场...
  7. Golang中unsafe.Sizeof()的问题
  8. 20155226-虚拟机与Linux之初体验
  9. 山东大学软件学院计算机组成原理课程设计实验三
  10. 复旦大学数学学院高等代数历届期中考试大题精选之一(08级--12级)
  11. 一台电脑能装两个版本的cad吗_同一台电脑装多个cad 电脑怎么装cad软件步骤
  12. 用计算机谈我还是从前那个少年,我还是从前那个少年是什么歌-我还是从前那个少年抖音歌曲介绍...
  13. c语言条件语句程序实例,c语言if(c语言if语句例子)
  14. Markdown详细教程+技巧总结
  15. Python二手房价格预测(二)——数据处理及数据可视化
  16. 鸟哥的Linux 私房菜 (1-12) + my
  17. 微信公众号分享给微信好友和朋友圈
  18. D-U-N-S Number 邓白氏编码申请流程
  19. 符合w3c 的 strict标准,用 rel 替换_blank打开新窗口
  20. Mars3D(含Cesium)数据及服务篇:TIF地形转terrain格式

热门文章

  1. 怎么查江苏省计算机一级成绩,江苏省计算机一级查询成绩在哪里查-江苏省计算机一级查询成绩查询网址-常州宝...
  2. LeetCode 416. 分割等和子集(动态规划)(0-1背包)
  3. matlab查找指定文件夹下文件(附汉字和标点符号读取方法)
  4. mfc单文档中如何将view的基类由CView转为CScrollview
  5. 优化数据库的思想及SQL语句优化的原则
  6. SQL语句和EF Group by 用法
  7. 认识Python基础环境搭建
  8. Spring数据转换(二)-- @InitBinder
  9. React Native 系列(七) -- ListView
  10. Javascript 学习笔记 - 函数 - 关于IIFE - 关于函数声明和函数表达式 - 个人总结