为什么Python不缓存超出[-5,256]范围的整数值?

时间:2019-06-05 17:01:06

标签: python

我正在使用Python进行变量初始化的实验,遇到一种情况,即在一定范围内的id(整数)相同且id(整数)大于256,Python创建了一个新引用。

例如:

>>>> a = 2
>>>> b = 2
>>>> id(a) == id(b)
True

>>>> a = 257
>>>> b = 257
>>>> id(a) == id(b)
False

通读文档,很明显Python在初始化期间会缓存小的整数值。

https://hg.python.org/cpython/file/tip/Objects/longobject.c#l5343

为什么Python在初始化期间内部仅缓存[-5,257)范围内的整数值?

此外,python共享带字符串的引用,字符串不带空格和特殊字符。

所以,我有几个问题:

  • 为什么小整数在-5到256之间?
  • 为什么它以负5开头并以256结尾?这是一个相对较小的范围。如果Python缓存更大的范围,则效率会更高。不是吗?
  • Python如何能够共享具有非常长的字符串值但不包含[-5,257)以外的整数值的引用?

例如:

>>> a = "csjhdfsdkbvfbvkfdbkfdbkfjdbvfdbjhdvkdbvkdbfsgvxcxc"
>>> b = "csjhdfsdkbvfbvkfdbkfdbkfjdbvfdbjhdvkdbvkdbfsgvxcxc"
>>> id(a) == id(b)
True


>>> a = "csjhdfsdkbvfbvkfdbkfdbkfjdbvfdbjhdvkdbvkdb@"
>>> b = "csjhdfsdkbvfbvkfdbkfdbkfjdbvfdbjhdvkdbvkdb@"
>>> id(a) == id(b)
False

0 个答案:

没有答案