对Python中小整数对象池和大整数对象池的使用详解


Posted in Python onJuly 09, 2019

1. 小整数对象池

整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间。

Python 对小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收。在一个 Python 的程序中,无论这个整数处于LEGB中的哪个位置,

所有位于这个范围内的整数使用的都是同一个对象。同理,单个字母也是这样的。

In [1]: a=-5

In [2]: b=-5

In [3]: a is b
Out[3]: True

In [4]: a=256

In [5]: b=256

In [6]: a is b
Out[6]: True

In [7]: a=1000

In [8]: b=1000

In [9]: a is b
Out[9]: False
intern机制处理空格一个单词的复用机会大,所以创建一次,有空格创建多次,但是字符串长度大于20,就不是创建一次了。
In [13]: a="abc"

In [14]: b="abc"

In [15]: a is b
Out[15]: True

In [16]: a="helloworld"

In [17]: b="helloworld"

In [18]: a is b
Out[18]: True

In [19]: a="hello world"

In [20]: b="hello world"

In [21]: a is b
Out[21]: False
 

s1 = "abcd"
s2 = "abcd"
print(s1 is s2)

s1 = "a" * 20
s2 = "a" * 20
print(s1 is s2)

s1 = "a" * 21
s2 = "a" * 21
print(s1 is s2)

s1 = "ab" * 10
s2 = "ab" * 10
print(s1 is s2)

s1 = "ab" * 11
s2 = "ab" * 11
print(s1 is s2)
# True
# True
# False
# True
# False

2.大整数对象池。说明:终端是每次执行一次,所以每次的大整数都重新创建,而在pycharm中,每次运行是所有代码都加载都内存中,属于一个整体,所以

这个时候会有一个大整数对象池,即处于一个代码块的大整数是同一个对象。c1 和d1 处于一个代码块,而c1.b和c2.b分别有自己的代码块,所以不相等。

C1.b is C2.b
In [22]: a=1000

In [23]: b=1000

In [24]: a is b
Out[24]: False

In [25]: a=-1888

In [26]: b=-1888

In [27]: a is b
Out[27]: False

In [28]: 
c1 = 1000
d1 = 1000
print(c1 is d1) # True

class C1(object):
  a = 100
  b = 100
  c = 1000
  d = 1000


class C2(object):
  a = 100
  b = 1000


print(C1.a is C1.b) # True
print(C1.a is C2.a) # True
print(C1.c is C1.d) # True
print(C1.b is C2.b) # False

以上这篇对Python中小整数对象池和大整数对象池的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的ORM框架SQLObject入门实例
Apr 28 Python
Python的Bottle框架的一些使用技巧介绍
Apr 08 Python
在Python中测试访问同一数据的竞争条件的方法
Apr 23 Python
Python 专题一 函数的基础知识
Mar 16 Python
Python实现邮件的批量发送的示例代码
Jan 23 Python
解决已经安装requests,却依然提示No module named requests问题
May 18 Python
python复制列表时[:]和[::]之间有什么区别
Oct 16 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
Oct 21 Python
python实现连续图文识别
Dec 18 Python
利用Django模版生成树状结构实例代码
May 19 Python
python 普通克里金(Kriging)法的实现
Dec 19 Python
Django如何实现密码错误报错提醒
Sep 04 Python
Python 旋转打印各种矩形的方法
Jul 09 #Python
python opencv对图像进行旋转且不裁剪图片的实现方法
Jul 09 #Python
python下的opencv画矩形和文字注释的实现方法
Jul 09 #Python
Python3 执行系统命令并获取实时回显功能
Jul 09 #Python
利用python开发app实战的方法
Jul 09 #Python
python设置环境变量的作用和实例
Jul 09 #Python
python版百度语音识别功能
Jul 09 #Python
You might like
PHP新手上路(十四)
2006/10/09 PHP
Cannot modify header information错误解决方法
2008/10/08 PHP
PHP URL参数获取方式的四种例子
2014/02/28 PHP
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
php自定义apk安装包实例
2014/10/20 PHP
PHP入门教程之图像处理技巧分析
2016/09/11 PHP
IE中jscript/javascript的条件编译
2006/09/07 Javascript
异步动态加载js与css文件的js代码
2013/09/15 Javascript
2种jQuery 实现刮刮卡效果
2015/02/01 Javascript
js实现交换运动效果的方法
2015/04/10 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
2016/12/09 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
详解angular如何调用HTML字符串的方法
2018/06/30 Javascript
在微信小程序里使用watch和computed的方法
2018/08/02 Javascript
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
2019/07/19 Python
Python2和3字符编码的区别知识点整理
2019/08/08 Python
Python编译成.so文件进行加密后调用的实现
2019/12/23 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
Python实现一个简单的递归下降分析器
2020/08/01 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
SIXPAD智能健身仪英国官网:革命性的训练装备品牌
2018/09/27 全球购物
临床医学大学生求职信
2013/09/28 职场文书
就业推荐表自我鉴定
2013/10/29 职场文书
学校督导评估方案
2014/06/10 职场文书
国际贸易毕业生自荐书
2014/06/22 职场文书
写得不错的求职信范文
2014/07/11 职场文书
中学生清明节演讲稿
2015/03/18 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书
商业计划书之服装
2019/09/09 职场文书