gpt4 book ai didi

python - 在 Python 的 C/C++ 扩展中,返回的 PyObject* 应该具有多少引用计数?

转载 作者:行者123 更新时间:2023-11-30 17:00:27 27 4
gpt4 key购买 nike

假设您为 python 编写了一个 C++(或 C)扩展,名为 module。它返回一个数组的数组。返回的数组及其数组应该有什么作为引用计数?

Python 代码类似于

import my_module
from sys import getrefcount as g # will use to check reference count

def use_module():
x = my_module.func()
print 'x =', x
print 'g(x) =', g(x)
print 'g(x[0]) =', g(x[0])
test = 'some random thing'
print 'should be', g(test), '?'

use_module()
>>> x = ( (1,2,3,4) , [2,3] , {'one':1} )
>>> g(x) = 3
>>> g(x[0]) = 3
>>> should be 2 ?

我希望g(x)2,而不是3。 (为 g 添加一个以引用 x 后)

在我的 C++ 扩展中,我已确保数组及其所有子集合及其元素在返回到 python 之前具有 1 的引用计数,因此我不确定它是如何实现的这么快就飙升到3?也许返回的 PyObject* 应该将 0 作为其引用计数?

编辑:对不起,我是个白痴。我在不知情的情况下又做了一个引用。

最佳答案

如果不存在对返回对象的其他引用,则引用计数应为 1。如果引用计数为 0,则该对象将被释放。

关于python - 在 Python 的 C/C++ 扩展中,返回的 PyObject* 应该具有多少引用计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37602307/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com