[Python] Operatore Is: funzionamento
Manlio Perillo
manlio_perillo a libero.it
Sab 27 Giu 2009 17:27:56 CEST
Francesco Ciracì ha scritto:
> [...]
> Is *dovrebbe*, a quanto ne so, essere un operatore di identità.
> Cioè restituire True se i due operandi sono la stessa variabile, non se
> hanno solo stesso valore.
Esatto.
Ma io sostituirei "variabile" con "oggetto".
> Cioè:
> >>> a is b
> Dovrebbe essere equivalente a:
> >>> id(a) == id(b)
>
> Però:
> >>> a = 5
> >>> b = 5
> >>> id(a)
> 505300184
> >>> id(b)
> 505300184
> >>> id(5)
> 505300184
La risposta è semplice: `a` e `b` rappresentano lo stesso oggetto.
Questa è la conseguenza di una ottimizzazione di CPython (la
implementazione ufficiale di Python): gli interi "piccoli" sono
conservati in cache, in modo da evitare allocazioni aggiuntive.
Contro esempio:
>>> a = 9999
>>> b = 9999
>>> a is b
False
>>> a = 10
>>> b = 10
>>> a is b
True
> Che non è affatto il comportamento che si aspetterebbe: per quanto ne so
> io, due variabili diverse non dovrebbero avere lo stesso indirizzo,
> condiviso anche con un literal poi!
>
Non hai chiaro come funzionano le "variabili" in Python.
http://docs.python.org/reference/executionmodel.html#naming-and-binding
Le variabili sono semplici referenze ad oggetti; sono delle "etichette"
che permettono di riferirsi ad un dato oggetto.
> E addirittura:
> >>> x = 8
> >>> y = 12
> >>> id(x)
> 505300232
> >>> id(y)
> 505300296
> >>> y=8
> >>> id(y)
> 505300232
>
Cosa ha di diverso questo esempio rispetto al primo che hai fatto?
> [...]
Ciao Manlio
Maggiori informazioni sulla lista
Python