据我所知,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])”对象是否仍然存在(没有垃圾收集)?
答案 0 :(得分:28)
当你调用getrefcount()
时,引用会按值复制到函数的参数中,暂时提升对象的引用计数。这是第二个引用的来源。
返回的计数通常比您预期的高一个, 因为它包含(临时)引用作为参数
getrefcount().
至于你的第二个问题:
如果我“del a”,“numpy.array([1.2,3.4])”对象是否仍然存在(没有垃圾收集)?
当getrefcount()
退出时,数组的引用计数将返回1,后续del a
将释放内存。