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 相关文章推荐
在Linux上安装Python的Flask框架和创建第一个app实例的教程
Mar 30 Python
在Python的Django框架中加载模版的方法
Jul 16 Python
Python中的错误和异常处理简单操作示例【try-except用法】
Jul 25 Python
Python内建函数之raw_input()与input()代码解析
Oct 26 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
Jan 18 Python
python正则表达式面试题解答
Apr 28 Python
Python实现的FTP通信客户端与服务器端功能示例
Mar 28 Python
python使用numpy读取、保存txt数据的实例
Oct 14 Python
Python解决线性代数问题之矩阵的初等变换方法
Dec 12 Python
对python模块中多个类的用法详解
Jan 10 Python
python实现Excel文件转换为TXT文件
Apr 28 Python
python视频按帧截取图片工具
Jul 23 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
深入file_get_contents函数抓取内容失败的原因分析
2013/06/25 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
PHP生成随机密码方法汇总
2015/08/27 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
2017/09/29 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
php中的buffer缓冲区用法分析
2019/05/31 PHP
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
详解JavaScript函数绑定
2013/08/18 Javascript
JS数组(Array)处理函数整理
2014/12/07 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
tracking.js页面人脸识别插件使用方法
2020/04/16 Javascript
vue+vuex+json-seiver实现数据展示+分页功能
2019/04/11 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
[00:44]2016完美“圣”典 风云人物:Mikasa宣传片
2016/12/07 DOTA
Python实现远程调用MetaSploit的方法
2014/08/22 Python
Python探索之创建二叉树
2017/10/25 Python
python中的字典操作及字典函数
2018/01/03 Python
Django中celery执行任务结果的保存方法
2019/07/12 Python
Python 寻找局部最高点的实现
2019/12/05 Python
基于python读取.mat文件并取出信息
2019/12/16 Python
python列表删除和多重循环退出原理详解
2020/03/26 Python
.NET笔试题(20个问题)
2016/02/02 面试题
超市采购员岗位职责
2014/02/01 职场文书
公共场所标语
2014/06/30 职场文书
初级职称评定工作总结
2015/08/13 职场文书
红领巾广播站广播稿
2015/08/19 职场文书
干货!开幕词的写作方法
2019/04/02 职场文书