Nehmen wir an, Sie haben eine C++ - (oder C-) Erweiterung für Python namens module
geschrieben. Es gibt ein Array von Arrays zurück. Was sollten das zurückgegebene Array und seine Arrays als Referenzzähler haben?In C/C++ - Erweiterungen für Python, welche Referenzzahl sollte ein zurückgegebenes PyObject * haben?
Der Python-Code wäre so etwas wie
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 ?
sein ich g(x)
erwarten würde 2
, nicht 3
sein.
In meinem C (nach dem Hinzufügen eines für g
x
zu referenzieren) ++ Erweiterung, ich habe dafür gesorgt, dass das Array und alle seine Untersammlungen und deren Elemente Referenzzähler von 1
bevor Python zurückgegeben werden, also bin ich nicht sicher, wie es so schnell auf 3
geschossen? Vielleicht zurückgegeben PyObject*
sollte 0
als Referenz zählen?
Edit: Entschuldigung, ich bin ein Idiot. Ich machte eine weitere Referenz, ohne es zu wissen.
Um klarer zu sein, https://docs.python.org/3/c-api/intro.html#reference-count-details sagt genau, wann die Refcount-Sachen passieren müssen, d. e. es erzählt von Referenzempfangen, Ausleihen, Stehlen usw. – glglgl