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基于scapy实现修改IP发送请求的方法示例
Jul 08 Python
Python模拟三级菜单效果
Sep 11 Python
Python通过matplotlib画双层饼图及环形图简单示例
Dec 15 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
Apr 24 Python
详解Python中的type和object
Aug 15 Python
python多线程http压力测试脚本
Jun 25 Python
python中class的定义及使用教程
Sep 18 Python
Keras中的多分类损失函数用法categorical_crossentropy
Jun 11 Python
Python 如何实现访问者模式
Jul 28 Python
详解tensorflow之过拟合问题实战
Nov 01 Python
用Python远程登陆服务器的步骤
Apr 16 Python
Python还能这么玩之只用30行代码从excel提取个人值班表
Jun 05 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
建立文件交换功能的脚本(三)
2006/10/09 PHP
DISCUZ 分页代码
2007/01/02 PHP
基于jquery的页面划词搜索JS
2010/09/14 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
js的表单操作 简单计算器
2011/12/29 Javascript
Table冻结表头示例代码
2013/08/20 Javascript
AngularJS入门教程之Hello World!
2014/12/06 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
2016/08/24 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
Vue开发中整合axios的文件整理
2017/04/29 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
浅谈Koa服务限流方法实践
2017/10/23 Javascript
详解mpvue开发微信小程序基础知识
2019/09/23 Javascript
vue 重塑数组之修改数组指定index的值操作
2020/08/09 Javascript
Python写的服务监控程序实例
2015/01/31 Python
编写Python的web框架中的Model的教程
2015/04/29 Python
按日期打印Python的Tornado框架中的日志的方法
2015/05/02 Python
python选择排序算法实例总结
2015/07/01 Python
Python复制文件操作实例详解
2015/11/10 Python
python抓取网页中链接的静态图片
2018/01/29 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
Django 路由控制的实现代码
2018/11/08 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
java判断三位数的实例讲解
2019/06/10 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
.NET现在共支持多少种语言
2014/02/26 面试题
UNIX特点都有哪些
2016/04/05 面试题
电子专业求职信
2014/06/19 职场文书
学校教师安全责任书
2014/07/23 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
客服专员岗位职责
2015/02/10 职场文书
听课评课活动心得体会
2016/01/15 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript