对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实现模拟时钟代码推荐
Nov 08 Python
详谈Python基础之内置函数和递归
Jun 21 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
python aiohttp的使用详解
Jun 20 Python
python脚本开机自启的实现方法
Jun 28 Python
OpenCV 边缘检测
Jul 10 Python
使用 python pyautogui实现鼠标键盘控制功能
Aug 04 Python
selenium2.0中常用的python函数汇总
Aug 05 Python
Win10下python 2.7与python 3.7双环境安装教程图解
Oct 12 Python
Python如何操作office实现自动化及win32com.client的运用
Apr 01 Python
python将dict中的unicode打印成中文实例
May 11 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
Dec 08 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 求质素(素数) 的实现代码
2011/04/12 PHP
php中rename函数用法分析
2014/11/15 PHP
PHP自动生成表单代码分享
2015/06/19 PHP
php中注册器模式类用法实例分析
2015/11/03 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
2014/06/06 Javascript
js的image onload事件使用遇到的问题
2014/07/15 Javascript
Node.js环境下JavaScript实现单链表与双链表结构
2016/06/12 Javascript
简单模拟node.js中require的加载机制
2016/10/27 Javascript
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
微信小程序之自定义组件的实现代码(附源码)
2018/08/02 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
2018/08/14 jQuery
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
javascript 使用sleep函数的常见方法详解
2020/04/26 Javascript
vue相同路由跳转强制刷新该路由组件操作
2020/08/05 Javascript
jQuery实现回到顶部效果
2020/10/19 jQuery
[02:36]DOTA2英雄基础教程 一击致命幻影刺客
2013/12/06 DOTA
Python中使用select模块实现非阻塞的IO
2015/02/03 Python
python动态性强类型用法实例
2015/05/09 Python
python处理二进制数据的方法
2015/06/03 Python
python数字图像处理之高级滤波代码详解
2017/11/23 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
在Pandas中处理NaN值的方法
2019/06/25 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
高中军训广播稿
2014/01/14 职场文书
教师个人自我鉴定
2014/02/08 职场文书
机关党员进社区活动总结
2014/07/05 职场文书
2014年电话销售工作总结
2014/12/01 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书
2016年小学六一儿童节活动总结
2016/04/06 职场文书
用python基于appium模块开发一个自动收取能量的小助手
2021/09/25 Python