Why does sys.getrefcount() return 2?(为什么 sys.getrefcount() 返回 2?)
问题描述
据我了解,sys.getrefcount() 返回对象的引用数,在以下情况下应该"为 1:
As I understand, sys.getrefcount() returns the number of references of an object, which "should" be 1 in the following case:
import sys,numpy
a = numpy.array([1.2,3.4])
print sys.getrefcount(a)
然而,结果是2!所以,如果我:
However, it turned out to be 2! So, if I:
del a
numpy.array([1.2,3.4])"对象是否仍然存在(没有垃圾回收)?
Will the "numpy.array([1.2,3.4])" object still be there (no garbage collection)?
推荐答案
当你调用 getrefcount()
时,引用按值复制到函数的参数中,暂时增加对象的引用计数.这就是第二个引用的来源.
When you call getrefcount()
, the reference is copied by value into the function's argument, temporarily bumping up the object's reference count. This is where the second reference comes from.
这在文档中有解释:
返回的计数通常比您预期的高 1,因为它包含(临时)引用作为参数getrefcount().
The count returned is generally one higher than you might expect, because it includes the (temporary) reference as an argument to
getrefcount().
关于你的第二个问题:
如果我del a",numpy.array([1.2,3.4])"对象是否仍然存在(没有垃圾回收)?
If I "del a", will the "numpy.array([1.2,3.4])" object still be there (no garbage collection)?
当 getrefcount()
退出时,数组的引用计数将回到 1,随后的 del a
将释放内存.
By the time getrefcount()
exits, the array's reference count will to back to 1, and a subsequent del a
would release the memory.
这篇关于为什么 sys.getrefcount() 返回 2?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:为什么 sys.getrefcount() 返回 2?


基础教程推荐
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01
- 筛选NumPy数组 2022-01-01
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- 用于分类数据的跳跃记号标签 2022-01-01