Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python getrefcount的值_Python - Fatal编程技术网

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笔记本,所以在那里的行为也不同?