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 相关文章推荐
自动化Nginx服务器的反向代理的配置方法
Jun 28 Python
Python实现查找系统盘中需要找的字符
Jul 14 Python
python实现媒体播放器功能
Feb 11 Python
Python定时任务sched模块用法示例
Jul 16 Python
修改默认的pip版本为对应python2.7的方法
Nov 06 Python
python pyinstaller 加载ui路径方法
Jun 10 Python
Python+OpenCv制作证件图片生成器的操作方法
Aug 21 Python
Django项目基础配置和基本使用过程解析
Nov 25 Python
Python 生成一个从0到n个数字的列表4种方法小结
Nov 28 Python
python函数不定长参数使用方法解析
Dec 14 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
python使用自定义钉钉机器人的示例代码
Jun 24 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基于mcrypt的加密解密实例
2014/10/27 PHP
thinkphp实现发送邮件密码找回功能实例
2014/12/01 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
2016/03/09 PHP
php通过pecl方式安装扩展的实例讲解
2018/02/02 PHP
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
很酷的javascript loading效果代码
2008/06/18 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
浏览器的JavaScript引擎的识别方法
2013/10/20 Javascript
jquery控制display属性为none或block
2014/03/31 Javascript
JavaScript函数的4种调用方法详解
2014/04/22 Javascript
让IE8浏览器支持function.bind()方法
2014/10/16 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
Node.js中流(stream)的使用方法示例
2017/07/16 Javascript
图片加载完成再执行事件的实例
2017/11/16 Javascript
关于angularJs清除浏览器缓存的方法
2017/11/28 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
2020/03/12 Javascript
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
[01:02:02]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第二局
2016/02/25 DOTA
windows下Virtualenvwrapper安装教程
2017/12/13 Python
对Python生成器、装饰器、递归的使用详解
2019/07/19 Python
Python编写一个验证码图片数据标注GUI程序附源码
2019/12/09 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
Python内置函数及功能简介汇总
2020/10/13 Python
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
Foot Locker英国官网:美国知名运动产品零售商
2019/02/21 全球购物
PHP如何设置和取得Cookie值
2015/06/30 面试题
好家长事迹材料
2014/01/23 职场文书
行政助理的岗位职责
2014/02/18 职场文书
房屋转让协议书
2014/10/18 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
2016年6月份红领巾广播稿
2015/12/21 职场文书
《称赞》教学反思
2016/02/17 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python