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

2019-06-23 21:54发布

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

Answer 1:

当你调用getrefcount()参考由值到函数的参数复制,暂时撞到了对象的引用计数。 这是其中第二参考来自。

这是在说明文档 :

返回的计数是一个普遍高于你所期望的,因为它包含了(临时)引用作为参数传递给getrefcount().

关于你提到的第二个问题:

如果我“删除了”,将“numpy.array([1.2,3.4])”对象仍然存在(没有垃圾收集)?

由时间getrefcount()退出时,所述阵列的引用计数将要回1,以及随后的del a将释放存储器。



文章来源: Why does sys.getrefcount() return 2?