python中内存管理机制(Python中整数的缓存机制讲解)
python中内存管理机制
Python中整数的缓存机制讲解在python中,如下代码结果一定不会让你吃惊:
|
Python 3.3 . 2 (v3. 3.2 :d047928ae3f6, May 16 2013 , 00 : 06 : 53 ) [MSC v. 1600 64 bit (AMD64)] on win32 Type "copyright" , "credits" or "license()" for more information. >>> a = 345 >>> b = a >>> a is b True >>> |
没错,在python一切皆是对象,而对象是通过引用传递的。在赋值时,不管这个对象是新创建的,还是一个已经存在的,都是将该对象的引用赋值给变量。故这里a实际上和b是同一个对象,a is b为true!
当然稍为了解python的人我相信都会知道以上相关知识的。但是如下的代码结果,却让人不大好理解了:
|
>>> c = 256 >>> d = 256 >>> c is d True >>> e = 257 >>> f = 257 >>> e is f False >>> |
我们将c赋值为了整型值256,d也为256,e为257,f为257。但是当把c与d,e与f进行is操作时,却发现两者的结果不同。
原因在哪?
——这个是由python中的整型对象的缓冲池机制,所决定的。
在python中几乎所有的内建对象,都会有自己所特有的对象池机制。
1.小整数对象——小整型对象池
在实际编程中,数值比较小的整数,比如1,2,29等,可能会非常频繁的出现。而在python中,所有的对象都存在与系统堆上。想想?如果某个小整数出现的次数非常多,那么python将会出现大量的malloc/free操作,这样大大降低了运行效率,而且会造成大量的内存碎片,严重影响Python的整体性能。
在python2.5乃至3.3中,将小整数位于[-5,257)之间的数,缓存在小整型对象池中。
这也就是为了c is d而e is not f的原因了。
2.大整数对象——通用整数对象池
由以上知,python把小整型数完全的缓存在了小对象缓存池中了。而那些大整数对象就没有那么好的待遇了!python运行环境提供了一块内存空间供大整数轮流使用。通常称为通用整数对象池。这也就是说大整数其实也是有缓存的。该对象池使用链表组织,虽然e和f有着相同的值,但是在链表中确是不同的节点。也就是说e和f根本不是一个对象。至于既然有缓存,为什么e和f还要组织为两个节点,就不大明白了。
讲讲我的看法吧:我觉得从语义上来讲e=257和f=257本身就是应当为两个不同的对象(这点和对象赋值不同)。由于整数缓存池的存在,让大家觉得任何整数在缓冲池中都只能存在一个,不能重复。但将e和f在整数缓冲池中组织为一个节点或两个节点没有什么本质区别吧(除了浪费了一点内存)。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开心学习网的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/baidu20008/article/details/22432247
- python 配置文件环境变量(python环境路径配置以及命令行运行脚本)
- pythonmatplotlib画图流程(python3使用matplotlib绘制条形图)
- python删除数据框重复变量(Python3删除排序数组中重复项的方法分析)
- python怎么自动刷抖音(python实现抖音点赞功能)
- python线程自动停止了(解决Python中定时任务线程无法自动退出的问题)
- python算法图解(python实现kmp算法的实例代码)
- python开启线程池(对python:threading.Thread类的使用方法详解)
- python微信红包分配(PHP切割整数工具类似微信红包金额分配的思路详解)
- python核心编程和python基础教程(从0开始的Python学习014面向对象编程推荐)
- 详解Python locals()的陷阱(详解Python locals的陷阱)
- python怎么装opencv(Python基于opencv实现的简单画板功能示例)
- python读取文件的正确方法(强悍的Python读取大文件的解决方案)
- python中字符串截取规则(Python中的字符串切片截取字符串的详解)
- python装饰器怎么设置(深入了解和应用Python 装饰器 @decorator)
- python编写告白程序(python抖音表白程序源代码)
- 虚拟环境python详细教程(python创造虚拟环境方法总结)
- 26岁杨紫的白素贞遇上24岁鞠婧祎,哪个最美(26岁杨紫的白素贞遇上24岁鞠婧祎)
- 鞠婧祎和杨紫两种风格的女生,你心里谁比较美(鞠婧祎和杨紫两种风格的女生)
- 三千年第一美女鞠婧祎出演白素贞pk杨紫,颜值胜赵雅芝王祖贤(三千年第一美女鞠婧祎出演白素贞pk杨紫)
- 成都轨道交通13号线一期工程最新进展(成都轨道交通13号线一期工程最新进展)
- 越南没事(越南没事情做)
- 重庆旅游攻略(重庆旅游3-4天攻略最佳线路)
热门推荐
- windows下nginx负载均衡配置(使用nginx配置访问wgcloud的方法)
- php上传大文件教程(PHP实现带进度条的Ajax文件上传功能示例)
- python实现在同一电脑上tcp通信(Python两台电脑实现TCP通信的方法示例)
- 怎么安装xftp(Xftp的下载和安装教程图文教程)
- python学生管理系统的思路(python实现学员管理系统)
- react 分页列表优化(使用react-beautiful-dnd实现列表间拖拽踩坑)
- python 获取ip mac 地址(Python3获取电脑IP、主机名、Mac地址的方法示例)
- laravel认证系统(Laravel框架Auth用户认证操作实例分析)
- explain语句详解(聊聊explain查看执行计划)
- app云服务器(为什么APP开发首选云服务器?)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9