Python小整数与大整数对象池机制详解

Elena
Elena
发布时间:2026-10-14| 5人浏览过
原创

本文详解Python中小整数对象池(范围[-5, 256])的预创建机制,以及大整数在不同执行环境(如终端与PyCharm)下的复用规则。通过代码示例解析is运算符在整数比较中的表现,帮助开发者理解Python的内存优化策略及潜在陷阱。

小整数对象池机制

1. 小整数对象池

整数在程序开发中应用极为广泛。为了提升运行效率,Python引入了小整数对象池机制,旨在避免频繁地为整数分配和释放内存空间。

Python将小整数的定义范围设定为 [-5, 256]。这些整数对象在解释器启动时已预先创建,且不会被垃圾回收机制回收。无论这些整数出现在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等IDE中,代码通常作为一个整体加载到内存中执行,因此

此时会存在一个大整数对象池,即处于同一代码块内的大整数会复用同一个对象。例如,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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。