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 相关文章推荐
在RedHat系Linux上部署Python的Celery框架的教程
Apr 07 Python
Python中字典的基本知识初步介绍
May 21 Python
简单的Apache+FastCGI+Django配置指南
Jul 22 Python
Pycharm学习教程(1) 定制外观
May 02 Python
Python 16进制与中文相互转换的实现方法
Jul 09 Python
Python检查 云备份进程是否正常运行代码实例
Aug 22 Python
python使用yield压平嵌套字典的超简单方法
Nov 02 Python
有关Tensorflow梯度下降常用的优化方法分享
Feb 04 Python
利用Python制作动态排名图的实现代码
Apr 09 Python
对python pandas中 inplace 参数的理解
Jun 27 Python
matplotlib交互式数据光标实现(mplcursors)
Jan 13 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
Feb 27 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 url 加密解密函数代码
2011/08/26 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
JavaScript 嵌套函数指向this对象错误的解决方法
2010/03/15 Javascript
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
JavaScript页面模板库handlebars的简单用法
2015/03/02 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
2016/04/01 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
2016/09/04 Javascript
dul无法加载bootstrap实现unload table/user恢复
2016/09/29 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
python中函数默认值使用注意点详解
2016/06/01 Python
python 把文件中的每一行以数组的元素放入数组中的方法
2018/04/29 Python
对python中的xlsxwriter库简单分析
2018/05/04 Python
python和shell监控linux服务器的详细代码
2018/06/22 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
使用selenium模拟登录解决滑块验证问题的实现
2019/05/10 Python
python中pip的使用和修改下载源的方法
2019/07/08 Python
python3 线性回归验证方法
2019/07/09 Python
python实现名片管理器的示例代码
2019/12/17 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
pycharm下pyqt4安装及环境配置的教程
2020/04/24 Python
美国知名艺术画网站:Art.com
2017/02/09 全球购物
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
June Jacobs尊积帕官网:知名的spa水疗护肤品牌
2019/03/21 全球购物
工商学院毕业生个人自我评价
2013/09/19 职场文书
学校校庆演讲稿
2014/05/22 职场文书
关于读书的活动方案
2014/08/14 职场文书
2015年采购工作总结
2015/04/10 职场文书
导游词之镇江西津古渡
2019/11/06 职场文书
JavaScript严格模式不支持八进制的问题讲解
2021/11/07 Javascript
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL
Java 多线程协作作业之信号同步
2022/05/11 Java/Android