python 怎样进行内存管理


Posted in Python onNovember 10, 2020

从三个方面来说,主要有方面的措施:对象的引用计数机制、垃圾回收机制、内存池机制。

一、对象的引用计数机制

Python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。

引用计数增加的情况:

1、一个对象分配一个新名称

2、将其放入一个容器中(如列表、元组或字典)

引用计数减少的情况:

1、使用del语句对对象别名显示的销毁

2、引用超出作用域或被重新赋值

sys.getrefcount( )函数可以获得对象的当前引用计数

多数情况下,引用计数比你猜测得要大得多。对于不可变数据(如数字和字符串),解释器会在程序的不同部分共享内存,以便节约内存。

二、垃圾回收

1、当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。

2、当两个对象a和b相互引用时,del语句可以减少a和b的引用计数,并销毁用于引用底层对象的名称。然而由于每个对象都包含一个对其他对象的应用,因此引用计数不会归零,对象也不会销毁。(从而导致内存泄露)。为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们。

三、内存池机制

Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。

1、Pymalloc机制。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。

2、Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的malloc。

3、对于Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。

以上就是python 内存管理的详细内容,更多关于python 内存管理的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python 学习笔记
Dec 27 Python
使用Python3中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
python对指定目录下文件进行批量重命名的方法
Apr 18 Python
python实现连接mongodb的方法
May 08 Python
Python基于identicon库创建类似Github上用的头像功能
Sep 25 Python
机器学习的框架偏向于Python的13个原因
Dec 07 Python
python3模块smtplib实现发送邮件功能
May 22 Python
python利用requests库进行接口测试的方法详解
Jul 06 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
Jun 24 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
用python实现一个简单计算器(完整DEMO)
Oct 14 Python
pytorch model.cuda()花费时间很长的解决
Jun 01 Python
python tqdm实现进度条的示例代码
Nov 10 #Python
python 解决Windows平台上路径有空格的问题
Nov 10 #Python
Python在后台自动解压各种压缩文件的实现方法
Nov 10 #Python
Python高阶函数与装饰器函数的深入讲解
Nov 10 #Python
pytorch学习教程之自定义数据集
Nov 10 #Python
pytorch加载语音类自定义数据集的方法教程
Nov 10 #Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 #Python
You might like
php通过递归方式复制目录和子目录的方法
2015/03/13 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
页面中js执行顺序
2009/11/09 Javascript
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
2014/01/11 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
js添加事件的通用方法推荐
2016/05/15 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
2016/10/20 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
JS检测window.open打开的窗口是否关闭
2017/06/25 Javascript
详解vue中组件参数
2018/07/09 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
[01:16]DOTA2小知识课堂 Ep.03 芒果树无伤肉山
2019/12/05 DOTA
Cpy和Python的效率对比
2015/03/20 Python
pygame学习笔记(4):声音控制
2015/04/15 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
使用Python实现在Windows下安装Django
2018/10/17 Python
用python生成1000个txt文件的方法
2018/10/25 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
Python操作多维数组输出和矩阵运算示例
2019/11/28 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
国家地理在线商店:Shop National Geographic
2018/06/30 全球购物
乌克兰网上服装店:Bolf.ua
2018/10/30 全球购物
Marlies Dekkers内衣法国官方网上商店:国际知名的荷兰内衣品牌
2019/03/18 全球购物
简述数据库的设计过程
2015/06/22 面试题
教师先进工作者事迹材料
2014/05/01 职场文书
寻找成龙观后感
2015/06/12 职场文书
银行资信证明
2015/06/17 职场文书
生命的关键成分来自太空?陨石说是的
2022/04/29 数码科技