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监控网卡流量并使用graphite绘图的示例
Apr 27 Python
Python实现将n个点均匀地分布在球面上的方法
Mar 12 Python
python网络编程之数据传输UDP实例分析
May 20 Python
Python3中的真除和Floor除法用法分析
Mar 16 Python
Python连接SQLServer2000的方法详解
Apr 19 Python
python3之微信文章爬虫实例讲解
Jul 12 Python
python中的闭包函数
Feb 09 Python
python的dataframe和matrix的互换方法
Apr 11 Python
Linux系统(CentOS)下python2.7.10安装
Sep 26 Python
Python实现平行坐标图的绘制(plotly)方式
Nov 22 Python
基于python图书馆管理系统设计实例详解
Aug 05 Python
python 实现批量图片识别并翻译
Nov 02 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安装和实例
2013/11/10 PHP
PHP获取短链接跳转后的真实地址和响应头信息的方法
2014/07/25 PHP
PHP邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
php验证码实现代码(3种)
2015/09/07 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
Eclipse引入jquery报错如何解决
2015/12/01 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
基于JavaScript实现拖动滑块效果
2017/02/16 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
2017/11/07 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
Python基于twisted实现简单的web服务器
2014/09/29 Python
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
Django读取Mysql数据并显示在前端的实例
2018/05/27 Python
Python中时间datetime的处理与转换用法总结
2019/02/18 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
树莓派动作捕捉抓拍存储图像脚本
2019/06/22 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
为什么相对PHP黑python的更少
2020/06/21 Python
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
英国的领先快速时尚零售商:In The Style
2019/03/25 全球购物
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
游戏商店:Eneba
2020/04/25 全球购物
计算机网络专业推荐信
2013/11/24 职场文书
少儿节目主持串词
2014/04/02 职场文书
学年个人总结范文
2015/03/05 职场文书
防溺水安全教育主题班会
2015/08/12 职场文书
领导莅临指导欢迎词
2015/09/30 职场文书
解决jupyter notebook启动后没有token的坑
2021/04/24 Python
MySQL数据库 安全管理
2022/05/06 MySQL