21

据我了解, 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])”对象是否仍然存在(没有垃圾收集)?

4

1 回答 1

33

当您调用getrefcount()时,引用按值复制到函数的参数中,暂时增加对象的引用计数。这就是第二个参考的来源。

这在文档中进行了解释:

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

至于你的第二个问题:

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

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

于 2012-04-24T16:37:18.770 回答