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 _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python