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

发布于 2021-01-29 18:22:51

据我了解,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
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    文档中对此进行了解释:

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

    关于第二个问题:

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

    到时间结束时getrefcount(),数组的引用计数将恢复为1,随后的引用del a将释放内存。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看