Python getrefcount的值
我有一段代码,我试图推断一个对象相对于其内存位置的引用计数。我所理解的是一个变量是由它的内存地址引用的,它基本上给了我们传递给它的值。如果我错了,请纠正我 现在,我弄糊涂了,下面是输出代码:Python getrefcount的值,python,Python,我有一段代码,我试图推断一个对象相对于其内存位置的引用计数。我所理解的是一个变量是由它的内存地址引用的,它基本上给了我们传递给它的值。如果我错了,请纠正我 现在,我弄糊涂了,下面是输出代码: >>> import sys >>> a = [1,2,3] >>> id(a) 1920192000520 >>> sys.getrefcount(a) 8 >>> b = a >
>>> import sys
>>> a = [1,2,3]
>>> id(a)
1920192000520
>>> sys.getrefcount(a)
8
>>> b = a
>>> b
[1, 2, 3]
>>> sys.getrefcount(b)
23
我已经调用过这些变量一次(即没有以前的声明或其他引用),所以不确定为什么内存中同一个对象会有更高的值,如8、23
虽然我在传递实际内存id时看到值是正确的,但我得到的值为1
>>> sys.getrefcount(id(a))
1
>>> sys.getrefcount(id(b))
1
为什么会有差异,有人能解释一下这个概念吗
非常感谢。请注意,
sys.getrefcount(id(a))没有固有的意义。
。它为您提供一些随机数值的refcount,而不是内存地址处的对象的refcount,该内存地址由id
返回的值表示。您是否在REPL中运行代码?交互式提示可以在幕后进行很多操作。例如,它可能正在检查变量以进行诊断。尝试使用常规的python.exe运行代码,您可能会得到更合理的数字。我使用的是Jupyter笔记本,因此其行为也有所不同?请注意,sys.getrefcount(id(a))
没有固有的含义。它为您提供一些随机数值的refcount,而不是内存地址处的对象的refcount,该内存地址由id
返回的值表示。您是否在REPL中运行代码?交互式提示可以在幕后进行很多操作。例如,它可能正在检查变量以进行诊断。尝试使用常规python.exe运行代码,您可能会得到更合理的数字。我使用的是Jupyter笔记本,所以在那里的行为也不同?