对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实现备份目录的方法
Aug 03 Python
使用C++扩展Python的功能详解
Jan 12 Python
用python实现百度翻译的示例代码
Mar 09 Python
python创建文件时去掉非法字符的方法
Oct 31 Python
Python实现字符串匹配的KMP算法
Apr 04 Python
Python进程间通信Queue消息队列用法分析
May 22 Python
Flask 上传自定义头像的实例详解
Jan 09 Python
浅析python 定时拆分备份 nginx 日志的方法
Apr 27 Python
Python打印不合法的文件名
Jul 31 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
Aug 07 Python
Pytest单元测试框架如何实现参数化
Sep 05 Python
python实现扫雷游戏的示例
Oct 20 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
从刷票了解获得客户端IP的方法
2015/09/21 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
PHP实现从上往下打印二叉树的方法
2018/01/18 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
JQuery each打印JS对象的方法
2013/11/13 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
JQuery获取表格数据示例代码
2014/05/26 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
浅谈JSON.parse()和JSON.stringify()
2015/07/14 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
2017/09/27 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
vue 不使用select实现下拉框功能(推荐)
2018/05/17 Javascript
探秘vue-rx 2.0(推荐)
2018/09/21 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
基于scrapy实现的简单蜘蛛采集程序
2015/04/17 Python
python截取两个单词之间的内容方法
2018/12/25 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
Python Pandas 箱线图的实现
2019/07/23 Python
pip安装python库的方法总结
2019/08/02 Python
pip install python 快速安装模块的教程图解
2019/10/08 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
完美解决Pycharm中matplotlib画图中文乱码问题
2021/01/11 Python
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
英国高端食品和葡萄酒超市:Waitrose
2016/08/23 全球购物
英国奢侈品网站:MatchesFashion
2016/12/16 全球购物
戴森英国官网:Dyson英国
2019/05/07 全球购物
VisionPros美国站:加拿大在线隐形眼镜和眼镜零售商
2020/02/11 全球购物
介绍一下Java的事务处理
2012/12/07 面试题
我的网上商城创业计划书
2013/12/26 职场文书
先进典型发言材料
2014/12/30 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书