Hai*_*ang 18 python garbage-collection
据我所知,sys.getrefcount()返回一个对象的引用数,在下列情况下"应该"为1:
import sys,numpy
a = numpy.array([1.2,3.4])
print sys.getrefcount(a)
Run Code Online (Sandbox Code Playgroud)
然而,事实证明是2!所以,如果我:
del a
Run Code Online (Sandbox Code Playgroud)
"numpy.array([1.2,3.4])"对象是否仍然存在(没有垃圾收集)?
NPE*_*NPE 31
当您调用时getrefcount(),引用将按值复制到函数的参数中,暂时提升对象的引用计数.这是第二个参考来自的地方.
这在文档中解释:
返回的计数通常比您预期的高一个,因为它包含(临时)引用作为参数
getrefcount().
至于你的第二个问题:
如果我"del a",那么"numpy.array([1.2,3.4])"对象是否仍然存在(没有垃圾收集)?
到getrefcount()退出时,数组的引用计数将返回1,随后del a将释放内存.