为什么sys.getrefcount()返回2?

时间:2012-04-24 16:34:35

标签: python garbage-collection

据我所知,sys.getrefcount()返回一个对象的引用数,在下列情况下“应该”为1:

import sys,numpy
a = numpy.array([1.2,3.4])
print sys.getrefcount(a)

然而,事实证明是2!所以,如果我:

del a

“numpy.array([1.2,3.4])”对象是否仍然存在(没有垃圾收集)?

1 个答案:

答案 0 :(得分:28)

当你调用getrefcount()时,引用会按值复制到函数的参数中,暂时提升对象的引用计数。这是第二个引用的来源。

documentation

中对此进行了解释
  

返回的计数通常比您预期的高一个,   因为它包含(临时)引用作为参数   getrefcount().

至于你的第二个问题:

  

如果我“del a”,“numpy.array([1.2,3.4])”对象是否仍然存在(没有垃圾收集)?

getrefcount()退出时,数组的引用计数将返回1,后续del a将释放内存。