对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 相关文章推荐
python3生成随机数实例
Oct 20 Python
python Django框架实现自定义表单提交
Mar 25 Python
分析Python读取文件时的路径问题
Feb 11 Python
Python线程同步的实现代码
Oct 03 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
关于阿里云oss获取sts凭证 app直传 python的实例
Aug 20 Python
对django layer弹窗组件的使用详解
Aug 31 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
Mar 10 Python
python 将html转换为pdf的几种方法
Dec 29 Python
Jupyter notebook 更改文件打开的默认路径操作
May 21 Python
python cv2图像质量压缩的算法示例
Jun 04 Python
基于Python编写简易版的天天跑酷游戏的示例代码
Mar 23 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
层叠菜单的动态生成
2006/10/09 PHP
php 删除一个数组中的某个值.兼容多维数组!
2012/02/18 PHP
php数组生成html下拉列表的方法
2015/07/20 PHP
PHP类的封装与继承详解
2015/09/29 PHP
php根据用户名和手机号查询是否存在手机号码
2017/02/16 PHP
PHP实现浏览器格式化显示XML的方法示例
2019/01/22 PHP
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
2010/01/22 Javascript
动态加载外部javascript文件的函数代码分享
2011/07/28 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
2014/12/14 Javascript
第一次接触JS require.js模块化工具
2016/04/17 Javascript
js定义类的几种方法(推荐)
2016/06/08 Javascript
Jquery组件easyUi实现表单验证示例
2016/08/23 Javascript
EasyUI为Numberbox添加blur事件的方法
2017/03/05 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
2017/09/21 Javascript
小程序点击图片实现自动播放视频
2020/05/29 Javascript
layui 中select下拉change事件失效的解决方法
2019/09/20 Javascript
nodejs使用socket5进行代理请求的实现
2020/02/21 NodeJs
JS forEach跳出循环2种实现方法
2020/06/24 Javascript
Python的Flask框架及Nginx实现静态文件访问限制功能
2016/06/27 Python
Python引用类型和值类型的区别与使用解析
2017/10/17 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
Flask框架工厂函数用法实例分析
2019/05/25 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
Python常用类型转换实现代码实例
2020/07/28 Python
美国学校校服,儿童和婴儿服装:Cookie’s Kids
2016/10/14 全球购物
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
Lookfantastic澳大利亚官网:英国知名美妆购物网站
2021/01/07 全球购物
工程师岗位职责
2013/11/08 职场文书
物业工作计划书
2014/01/10 职场文书
致长跑运动员加油稿
2014/02/20 职场文书
股东合作协议书范本
2014/04/14 职场文书
公司出纳岗位职责
2015/03/31 职场文书
2015年税务稽查工作总结
2015/05/26 职场文书
java中重写父类方法加不加@Override详解
2021/06/21 Java/Android
利用JavaScript写一个简单计算器
2021/11/27 Javascript