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本地与全局命名空间用法实例
Jun 16 Python
使用python检测主机存活端口及检查存活主机
Oct 12 Python
Django实现自定义404,500页面教程
Mar 26 Python
Python实现的简单模板引擎功能示例
Sep 02 Python
python实现kNN算法
Dec 20 Python
浅谈pycharm出现卡顿的解决方法
Dec 03 Python
Python开发网站目录扫描器的实现
Feb 21 Python
Python基于OpenCV实现人脸检测并保存
Jul 23 Python
Django框架请求生命周期实现原理
Nov 13 Python
python 进制转换 int、bin、oct、hex的原理
Jan 13 Python
python OpenCV学习笔记
Mar 31 Python
asyncio异步编程之Task对象详解
Mar 13 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中判断变量为空的几种方法小结
2013/11/12 PHP
php中get_object_vars()方法用法实例
2015/02/08 PHP
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
2019/03/18 PHP
jquery提升性能最佳实践小结
2010/12/06 Javascript
在JavaScript中typeof的用途介绍
2013/04/11 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
js 阻止子元素响应父元素的onmouseout事件具体实现
2013/12/23 Javascript
jquery处理页面弹出层查询数据等待操作实例
2015/03/25 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
JS实现左右无缝轮播图代码
2016/05/01 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
javascript事件的传播基础实例讲解(35)
2017/02/14 Javascript
基于JS实现前端压缩上传图片的实例代码
2019/05/14 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
2019/09/21 Javascript
原生js+css调节音量滑块
2020/01/15 Javascript
微信小程序实现时间戳格式转换
2020/07/20 Javascript
微信小程序调用后台service教程详解
2020/11/06 Javascript
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
python中lambda()的用法
2017/11/16 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
numpy中矩阵合并的实例
2018/06/15 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
python与pycharm有何区别
2020/07/01 Python
Java的基础面试题附答案
2016/01/10 面试题
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
建龙钢铁面试总结
2014/04/15 面试题
请假条的格式
2014/04/11 职场文书
大学生个人求职信
2014/06/02 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
同事离别感言
2015/08/04 职场文书