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