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实现的二维码生成小软件
Jul 11 Python
Python计算已经过去多少个周末的方法
Jul 25 Python
详解MySQL数据类型int(M)中M的含义
Nov 20 Python
django输出html内容的实例
May 27 Python
Python运维开发之psutil库的使用详解
Oct 18 Python
在cmd中查看python的安装路径方法
Jul 03 Python
手机使用python操作图片文件(pydroid3)过程详解
Sep 25 Python
selenium中get_cookies()和add_cookie()的用法详解
Jan 06 Python
python3 xpath和requests应用详解
Mar 06 Python
基于python检查矩阵计算结果
May 21 Python
Django ModelForm组件原理及用法详解
Oct 12 Python
python 实现表情识别
Nov 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
与空气斗智斗勇的经典《Overlord》,传说中的“无稽之谈”
2020/04/09 日漫
php 邮件发送问题解决
2014/03/22 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
php基于curl重写file_get_contents函数实例
2016/11/08 PHP
PHP生成图表pChart的示例解析
2020/07/31 PHP
PHPstorm激活码2020年5月13日亲测有效
2020/09/17 PHP
javascript 模拟点击广告
2010/01/02 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
解决css和js的{}与smarty定界符冲突问题的两种方法
2013/09/10 Javascript
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
nodejs中实现路由功能
2014/12/29 NodeJs
浅谈javascript原型链与继承
2015/07/13 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
微信web端后退强制刷新功能的实现代码
2018/03/04 Javascript
详解vue-cli 2.0配置文件(小结)
2019/01/14 Javascript
微信小程序移动拖拽视图-movable-view实例详解
2019/08/17 Javascript
Vue的props父传子的示例代码
2020/05/20 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
遍历python字典几种方法总结(推荐)
2016/09/11 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
py-charm延长试用期限实例
2019/12/22 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
python海龟绘图之画国旗实例代码
2020/11/11 Python
zooplus意大利:在线宠物商店
2019/08/07 全球购物
未婚证明格式
2015/06/15 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers
java泛型通配符详解
2021/07/25 Java/Android
Java 写一个简单的图书管理系统
2022/04/26 Java/Android
Java 异步任务计算FutureTask
2022/04/28 Java/Android