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 爬虫的工具列表大全
Jan 31 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
Sep 26 Python
利用Python批量提取Win10锁屏壁纸实战教程
Mar 27 Python
pandas按若干个列的组合条件筛选数据的方法
Apr 11 Python
Python3对称加密算法AES、DES3实例详解
Dec 06 Python
python抓取搜狗微信公众号文章
Apr 01 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
Jun 14 Python
对python 树状嵌套结构的实现思路详解
Aug 09 Python
用Python解数独的方法示例
Oct 24 Python
Python列表操作方法详解
Feb 09 Python
django ORM之values和annotate使用详解
May 19 Python
python spilt()分隔字符串的实现示例
May 21 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语法(1)
2006/10/09 PHP
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
php Smarty 字符比较代码
2011/02/27 PHP
PHP采集利器 Snoopy 试用心得
2011/07/03 PHP
洪恩在线成语词典小偷程序php版
2012/04/20 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
在b/s开发中经常用到的javaScript技术
2006/08/23 Javascript
SOSO地图JS画出标注和中心点以html形式运行
2013/08/09 Javascript
jQuery中ready事件用法实例
2015/01/19 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
javascript 判断页面访问方式电脑或者移动端
2016/09/19 Javascript
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
[01:51]开启你的城市传奇 完美世界城市挑战赛开始报名
2018/10/09 DOTA
详解Python中的循环语句的用法
2015/04/09 Python
使用Python编写一个简单的tic-tac-toe游戏的教程
2015/04/16 Python
python中redis的安装和使用
2016/12/04 Python
使用python将大量数据导出到Excel中的小技巧分享
2018/06/14 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
python dict如何定义
2020/09/02 Python
文员个人求职自荐信
2013/09/21 职场文书
学校火灾防控方案
2014/06/09 职场文书
离婚协议书标准格式
2014/10/04 职场文书
行政诉讼答辩状
2015/05/21 职场文书
党章党规党纪学习心得体会
2016/01/14 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers