小整数池不是 python
的规范标准,而是 cpython
等解释器实现的时候的优化策略
。
- 在Python中,整数是不可变的对象,一旦创建,其值不能被修改,一些小的整数在很多程序中用到的频率高。
- 所以解释器采用将这些小整数对象在Python解释器启动时就被预先创建,以避免不断地创建和销毁小整数对象所导致的性能问题和内存浪费。一般这个范围是
[-5,256]
。
x = 1
y = 1
z = 1
print(id(x)) # 4308009200
print(id(y)) # 4308009200
print(id(z)) # 4308009200
print(x is y) # True
x = 257
y = 257
z = 257
print(id(x)) # 4435054448
print(id(y)) # 4435054192
print(id(z)) # 4435054416
print(x is y) # False
对于其他的常用的如字符串等也有此类的优化。