2012-04-24 14 views
5

Por lo que puedo decir, la diferencia entre PyList_SetItem y PyList_SETITEM es que PyList_SetItem reducirá el recuento de referencias del elemento de lista que sobreescribe y PyList_SETITEM no lo hace.PyList_SetItem vs. PyList_SETITEM

¿Hay alguna razón por la que no deba usar PyList_SetItem todo el tiempo? ¿O me metería en problemas si utilicé PyList_SetItem para inicializar una posición de índice en una lista?

Respuesta

6

PyList_SET_ITEM es una macro insegura que básicamente pega un objeto en la matriz de punteros internos de la lista sin ningún control vinculado. Si algo que no es NULL está en la posición i de la lista, se producirá una fuga de referencia. PyList_SET_ITEM roba la referencia al objeto que coloca en la lista. PyList_SetItem también roba la referencia, pero comprueba los límites y decreta cualquier cosa que pueda estar en la posición i. La regla de oro es usar PyList_SET_ITEM para inicializar las listas que acaba de crear y PyList_SetItem de lo contrario. También es completamente seguro usar PyList_SetItem en todas partes; PyList_SET_ITEM es básicamente un truco de velocidad.

+1

¿Pero me meteré en algún tipo de problema si uso PyList_SetItem * todo * el tiempo y * nunca * uso PyList_SETITEM? – user1245262

+2

Absolutamente no. De hecho, esa es probablemente la forma más segura. 'PyList_SET_ITEM' es principalmente un truco de velocidad. –

+0

Gracias, y gracias por agregar la última línea esclarecedora a su respuesta original. – user1245262

Cuestiones relacionadas