2012-04-24 2 views
5

Da quello che posso dire, la differenza tra PyList_SetItem e PyList_SETITEM è che PyList_SetItem abbassa il numero di riferimenti dell'elemento di elenco che sovrascrive e PyList_SETITEM no.PyList_SetItem vs. PyList_SETITEM

C'è qualche ragione per cui non dovrei usare PyList_SetItem per tutto il tempo? O mi metterei nei guai se usassi PyList_SetItem per inizializzare una posizione di indice in una lista?

risposta

6

PyList_SET_ITEM è una macro non sicura che sostanzialmente attacca un oggetto nella serie di puntatori interni della lista senza alcun controllo associato. Se qualcosa non- NULL si trova nella posizione i dell'elenco, si verificherà una perdita di riferimento. PyList_SET_ITEM ruba il riferimento all'oggetto che hai inserito nella lista. PyList_SetItem ruba anche il riferimento, ma controlla i limiti e decrepifica qualsiasi cosa possa trovarsi nella posizione i. La regola pratica è utilizzare PyList_SET_ITEM per inizializzare gli elenchi appena creati e PyList_SetItem in caso contrario. È inoltre completamente sicuro utilizzare PyList_SetItem ovunque; PyList_SET_ITEM è fondamentalmente un hack di velocità.

+1

Ma si verificheranno problemi di qualsiasi tipo se utilizzo PyList_SetItem * tutto * l'ora e * mai * non uso PyList_SETITEM? – user1245262

+2

Assolutamente no. In effetti, questo è probabilmente il modo più sicuro. 'PyList_SET_ITEM' è principalmente un hack di velocità. –

+0

Grazie - e grazie per aver aggiunto l'ultimo chiaretto alla tua risposta originale. – user1245262