python可以用del释放资源_Python中垃圾回收和del语句详解
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语句详解相关推荐
- python的常量和变量_python中的常量和变量代码详解
局部和全局变量: # name='lhf' # def change_name(): # # global name # name='帅了一比' # print('change_name',name) ...
- python向量机使用方法_Python中支持向量机SVM的使用方法详解
除了在Matlab中使用PRTools工具箱中的svm算法,Python中一样可以使用支持向量机做分类.因为Python中的sklearn库也集成了SVM算法,本文的运行环境是Pycharm. 一.导 ...
- python类定义以及调用_python中如何定义和调用类详解
类的方法的定义 1.def fun_name(self,...); Pass 2.其中的参数self代表类的实例,在调用方法时由系统自动提供 3.方法定义时必须指明self参数 类的方法的调用 与普通 ...
- python中列表的sort方法_python中列表的sort方法使用详解
内容简介:python中列表的sort方法使用详解 一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的. 排序,数字.字符 ...
- python format函数实例_python中强大的format函数实例详解
python中format函数用于字符串的格式化 自python2.6开始,新增了一种格式化字符串的函数str.format(),此函数可以快速处理各种字符串. 语法 它通过{}和:来代替%. 请看下 ...
- python支持向量机回归_Python中支持向量机SVM的使用方法详解
除了在Matlab中使用PRTools工具箱中的svm算法,Python中一样可以使用支持向量机做分类.因为Python中的sklearn库也集成了SVM算法,本文的运行环境是Pycharm. 一.导 ...
- python中mat函数_Python中flatten( )函数及函数用法详解
flatten()函数用法 flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组. flatten只能适用于numpy对象,即array或者mat,普通的list列 ...
- python中seek(10、1)_Python中index()和seek()的用法(详解)
1.index() 一般用处是在序列中检索参数并返回第一次出现的索引,没找到就会报错,比如: >>> t=tuple('Allen') >>> t ('A', 'l ...
- python中update是啥意思_python中update的基本使用方法详解
前言 Python 字典 update()方法用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中. 语法格式 d.update(e) 参数说明 将e中键-值对添加到字典 ...
最新文章
- 对 VR 项目开发流程的调研
- WPF 使用DMSkin for WPF 快速搭建漂亮的WPF程序
- Git账号以及TortoiseGit配置
- 开发外包注意事项——iOS APP的开发
- python定时发送信息_python实现定时发送消息
- 河南省高考让不让带计算机,河南高考2018严禁携带的东西有哪些?这种衣服不能进考场...
- Golang中unsafe.Sizeof()的问题
- 20155226-虚拟机与Linux之初体验
- 山东大学软件学院计算机组成原理课程设计实验三
- 复旦大学数学学院高等代数历届期中考试大题精选之一(08级--12级)
- 一台电脑能装两个版本的cad吗_同一台电脑装多个cad 电脑怎么装cad软件步骤
- 用计算机谈我还是从前那个少年,我还是从前那个少年是什么歌-我还是从前那个少年抖音歌曲介绍...
- c语言条件语句程序实例,c语言if(c语言if语句例子)
- Markdown详细教程+技巧总结
- Python二手房价格预测(二)——数据处理及数据可视化
- 鸟哥的Linux 私房菜 (1-12) + my
- 微信公众号分享给微信好友和朋友圈
- D-U-N-S Number 邓白氏编码申请流程
- 符合w3c 的 strict标准,用 rel 替换_blank打开新窗口
- Mars3D(含Cesium)数据及服务篇:TIF地形转terrain格式
热门文章
- 怎么查江苏省计算机一级成绩,江苏省计算机一级查询成绩在哪里查-江苏省计算机一级查询成绩查询网址-常州宝...
- LeetCode 416. 分割等和子集(动态规划)(0-1背包)
- matlab查找指定文件夹下文件(附汉字和标点符号读取方法)
- mfc单文档中如何将view的基类由CView转为CScrollview
- 优化数据库的思想及SQL语句优化的原则
- SQL语句和EF Group by 用法
- 认识Python基础环境搭建
- Spring数据转换(二)-- @InitBinder
- React Native 系列(七) -- ListView
- Javascript 学习笔记 - 函数 - 关于IIFE - 关于函数声明和函数表达式 - 个人总结