Python 为什么sys.getrefcount会给出巨大的值?

Python 为什么sys.getrefcount会给出巨大的值?,python,Python,输出: 22 614 我的python解释器有问题吗?为什么这会产生像614这样的巨大价值 Python版本 /usr/lib/python2.7/ 这是因为CPython在内部保留一个已创建的整数对象,其值为1,内部变量指向该对象。 只有一个这样的对象是有意义的,因为它是不可变的 同样的事情也适用于字符串文本,因为它们是不可变的编译器,通常在内存中保留一个唯一的字符串,并使变量指向它 文字越独特,内部创建它的机会就越小 import sys a = 10 b = a print sys.ge

输出:

22
614

我的python解释器有问题吗?为什么这会产生像614这样的巨大价值

Python版本

/usr/lib/python2.7/


这是因为CPython在内部保留一个已创建的整数对象,其值为1,内部变量指向该对象。 只有一个这样的对象是有意义的,因为它是不可变的

同样的事情也适用于字符串文本,因为它们是不可变的编译器,通常在内存中保留一个唯一的字符串,并使变量指向它

文字越独特,内部创建它的机会就越小

import sys

a = 10
b = a
print sys.getrefcount(a)
b=1
print sys.getrefcount(b)
正如您在这里的内部代码中所看到的,一些小的整数对象被创建并缓存以进行一些小的优化。

如果将值更改为非平凡值,则可以看到Python优化的效果(请参见@Nether的答案)。例如,如果您的代码更改为:

>>> sys.getrefcount(1337)
3
>>> sys.getrefcount('p')
14
>>> sys.getrefcount('StackOverflow')
3
输出为:

from __future__ import print_function

import sys

a = 1012345
b = a
print(sys.getrefcount(a))
b=12345678
print(sys.getrefcount(b))

在QPython3上,我得到了
29355
@Carcigenicate:我是Python新手。这是公认的行为吗?
5
4