Perché Python tenere un conteggio di riferimento su False e True?
-
12-09-2019 - |
Domanda
Stavo guardando il codice sorgente per la funzione built-in hasattr e ho notato un paio di righe che suscitato il mio interesse:
Py_INCREF(Py_False);
return Py_False;
...
Py_INCREF(Py_True);
return Py_True;
Non sono Py_False
e Py_True
valori globali? Solo per pura curiosità, il motivo per cui è Python mantenendo un conteggio di riferimento per queste variabili?
Soluzione
E 'per rendere tutto uniforme di movimentazione oggetto. Se sto scrivendo codice C che gestisce un valore di ritorno da una funzione, devo aumentare e diminuire il conteggio dei riferimenti su tale oggetto. Se la funzione mi restituisce True, io non voglio avere a controllare per vedere se si tratta di uno di quegli oggetti speciali per sapere se per manipolare il conteggio dei riferimenti. Posso trattare tutti gli oggetti in modo identico.
Trattando Vero e Falso (e None, btw) la stessa di tutti gli altri oggetti, il codice C è molto più semplice in tutto.