8 Stimmen

PyList_SetItem vs. PyList_SETITEM

Von dem, was ich sagen kann, ist der Unterschied zwischen PyList_SetItem und PyList_SETITEM, dass PyList_SetItem den Referenzzähler des Listenobjekts verringert, das überschrieben wird, und PyList_SETITEM nicht.

Gibt es einen Grund, warum ich nicht einfach immer PyList_SetItem verwenden sollte? Oder würde ich in Schwierigkeiten geraten, wenn ich PyList_SetItem verwende, um eine Indexposition in einer Liste zu initialisieren?

8voto

Benjamin Peterson Punkte 16442

PyList_SET_ITEM ist eine unsichere Makro, das im Grunde ein Objekt in das interne Zeigerarray der Liste einfügt, ohne irgendwelche Grenzprüfungen vorzunehmen. Wenn sich etwas Nicht-NULL an der i-ten Position der Liste befindet, wird ein Referenz-Leck auftreten. PyList_SET_ITEM entzieht die Referenz auf das Objekt, das Sie in die Liste eingelegt haben. PyList_SetItem entzieht ebenfalls die Referenz, überprüft aber die Grenzen und verkleinert alles, was sich möglicherweise an der i-ten Position befindet. Die Faustregel ist, PyList_SET_ITEM zu verwenden, um Listen zu initialisieren, die Sie gerade erstellt haben, und andernfalls PyList_SetItem zu verwenden. Es ist auch völlig sicher, überall PyList_SetItem zu verwenden; PyList_SET_ITEM ist im Grunde genommen ein Geschwindigkeits-Trick.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X