对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 正则式使用心得
May 07 Python
浅析Python中的序列化存储的方法
Apr 28 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
Aug 23 Python
python实现单向链表详解
Feb 08 Python
pandas.cut具体使用总结
Jun 24 Python
python设计tcp数据包协议类的例子
Jul 23 Python
python实现批量文件重命名
Oct 31 Python
PyCharm无法引用自身项目解决方式
Feb 12 Python
使用python实现微信小程序自动签到功能
Apr 27 Python
如何使用python自带IDLE的几种方法
Oct 10 Python
使用python爬取抖音app视频的实例代码
Dec 01 Python
python如何利用cv2模块读取显示保存图片
Jun 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
漂亮但不安全的CTB
2006/10/09 PHP
php使用GeoIP库实例
2014/06/27 PHP
PHP版QQ互联OAuth示例代码分享
2015/07/05 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
js时间日期和毫秒的相互转换
2013/02/22 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
JavaScript异步编程Promise模式的6个特性
2014/04/03 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
2017/03/23 Javascript
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
用python 制作图片转pdf工具
2015/01/30 Python
python实现分析apache和nginx日志文件并输出访客ip列表的方法
2015/04/04 Python
Python3.x对JSON的一些操作示例
2017/09/01 Python
Python爬取成语接龙类网站
2018/10/19 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
python中rc1什么意思
2020/06/19 Python
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
俄罗斯园林植物网上商店:Garshinka
2020/07/16 全球购物
C#中有没有运算符重载?能否使用指针?
2014/05/05 面试题
《长城》教学反思
2014/02/14 职场文书
刘公岛导游词
2015/02/05 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
闪闪红星观后感
2015/06/08 职场文书
2019年励志签名:致拼搏路上的自己
2019/10/11 职场文书
Pytorch distributed 多卡并行载入模型操作
2021/06/05 Python
深入理解Pytorch微调torchvision模型
2021/11/11 Python
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电
Nginx HTTP跳转至HTTPS
2022/05/15 Servers