Python小整数对象池

Python小整数对象池

01180

在 Python 中,整数可以表示的范围很大,但是常用的整数可能都集中在 -1000 到 1000 之间,如考试分数,一般在 0 到 100 之间,年龄也在 0 到 100 之间。

基于整数对象分布不均匀的特性,我们可以做一些优化来提升运行效率。

在 Python 解释器的内部实现中,对于 -5 到 256 内的整数建立了一个小整数池。如果要使用的整数对象在该范围内,其不会自动新建一个整数对象,而是看小整数池中是否有值相同的整数对象:

  • 如果有,则返回这个现有的整数对象;
  • 如果没有,则创建一个新的整数对象,这个新建的整数对象在以后也可能被共享使用。

我们可以使用函数 id() 来查看对象的地址,在 CPython 中,id() 返回的就是某个对象在内存中的地址信息。我们可以比较这个 id 值来查看是否存在这种共享关系。另外也可以用 is 来检查两个对象是否相同。

>>> a = 12      # 创建对象a,值为12
>>> id(a)       # 查看a的id值
8791344854192
>>> b = 11      # 新建对象b,值为11
>>> id(b)       # 查看b的id值
8791344854160   # b的id和a的id是不同的,它们是不同的整数对象
>>> a is b      # 使用is来判断a和b是不是同一个整数对象
False           # 它们的确不是同一个整数对象
>>> b = b + 1   # 重新给b赋值
>>> b           # 查看b的值
12              # b的值和a的值相同,都为12
>>> id(b)       # 查看b现在的id值
8791344854192   # b的id发生了变化,现在和a相同了
>>> a is b      # 用is来检查a和b是否是同一个对象
True            # 它们的确是同一个对象

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏
分享
评论 抢沙发
HarryPotter的头像|艾奇编程网

昵称

取消
昵称表情