对Python中小整数对象池和大整数对象池的使用详解
作者:wangyunfeis 时间:2023-02-17 18:13:49
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
来源:https://blog.csdn.net/wangyunfeis/article/details/77607156
标签:Python,小整数,大整数,对象池
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
vue+php实现的微博留言功能示例
2023-11-18 01:47:02
Python正则抓取新闻标题和链接的方法示例
2022-05-16 06:01:31
python利用正则表达式提取字符串
2021-12-08 15:13:29
JavaScript使用math.js进行精确计算操作示例
2024-04-10 10:54:41
go语言csrf库使用实现原理示例解析
2023-08-07 03:34:38
![](https://img.aspxhome.com/file/2023/7/97167_0s.jpg)
Win8.1下安装Python3.6提示0x80240017错误的解决方法
2021-12-24 08:36:51
Python Pandas如何获取和修改任意位置的值(at,iat,loc,iloc)
2024-01-01 23:16:43
python 的列表遍历删除实现代码
2023-07-15 11:44:35
![](https://img.aspxhome.com/file/2023/3/93603_0s.png)
js正则的几个基本概念
2007-09-30 20:02:00
pandas is in和not in的使用说明
2023-04-04 22:06:11
![](https://img.aspxhome.com/file/2023/7/117377_0s.jpg)
JavaScript大牛:Douglas Crockford
2009-03-31 12:06:00
![](https://img.aspxhome.com/file/UploadPic/20093/31/yui-team-14s.jpg)
Git commit --amend 修改提交信息操作
2022-11-01 02:03:32
Windows下PyMongo下载及安装教程
2023-09-18 14:52:18
彻底弄懂CSS盒子模式之五(定位强化练习)
2007-05-11 16:51:00
![](https://img.aspxhome.com/file/uploadpic/20075/2007511165148243.gif)
python使用代理ip访问网站的实例
2022-02-08 08:16:36
![](https://img.aspxhome.com/file/2023/5/85105_0s.jpg)
python中用logging实现日志滚动和过期日志删除功能
2021-03-17 14:21:18
SQL 将一列拆分成多列的三种方法
2024-01-23 15:30:18
![](https://img.aspxhome.com/file/2023/4/98004_0s.jpg)
详解python中的装饰器
2023-02-20 10:33:36
go sync Once实现原理示例解析
2023-07-01 12:21:13
深入理解JS中attribute和property的区别
2024-04-10 16:19:32
![](https://img.aspxhome.com/file/2023/6/136706_0s.png)