对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基础教程之字典操作详解
Mar 25 Python
python网络编程学习笔记(六):Web客户端访问
Jun 09 Python
深入理解python中的select模块
Apr 23 Python
对Xpath 获取子标签下所有文本的方法详解
Jan 02 Python
python实现图片二值化及灰度处理方式
Dec 07 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
Jan 18 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
Feb 28 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
Jul 21 Python
Python requests接口测试实现代码
Sep 08 Python
python如何运行js语句
Sep 09 Python
python打包多类型文件的操作方法
Sep 21 Python
Python连接Postgres/Mysql/Mongo数据库基本操作大全
Jun 29 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 管理系统程序中的后门
2009/08/05 PHP
php查询mssql出现乱码的解决方法
2014/12/29 PHP
php数组使用规则分析
2015/02/27 PHP
php抓取网站图片并保存的实现方法
2015/10/29 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
PHP PDOStatement::bindValue讲解
2019/01/30 PHP
thinkPHP事务操作简单案例分析
2019/10/17 PHP
laravel-admin 实现在指定的相册下添加照片
2019/10/21 PHP
Javascript 判断函数类型完美解决方案
2009/09/02 Javascript
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
js中查找最近的共有祖先元素的实现代码
2010/12/30 Javascript
潜说js对象和数组
2011/05/25 Javascript
javascript (用setTimeout而非setInterval)
2011/12/28 Javascript
JavaScript中Math对象方法使用概述
2014/01/02 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
JS限制条件补全问题实例分析
2016/12/16 Javascript
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python中MySQLdb模块用法实例
2014/11/10 Python
用python实现的线程池实例代码
2018/01/06 Python
Python绘制3D图形
2018/05/03 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
python字符串常用方法
2018/06/14 Python
python SocketServer源码深入解读
2019/09/17 Python
Django查询优化及ajax编码格式原理解析
2020/03/25 Python
详解pyinstaller生成exe的闪退问题解决方案
2020/06/19 Python
css3实现3D文本悬停改变效果的示例代码
2019/01/16 HTML / CSS
美国现代家具和家居商店:Apt2B
2016/08/29 全球购物
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
教师师德演讲稿
2014/05/06 职场文书
2014国庆黄金周超市促销活动方案
2014/09/21 职场文书
预备党员入党感想
2015/08/10 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书
60条职场经典语录,总有一条能触动你的心
2019/08/21 职场文书