2014-06-08 22 views
6

Durante il tentativo di rispondere a una domanda circa l'uso della parola chiave is, ho capito che questo codice:Perché "a is b" si comporta diversamente sulla modalità interattiva e quando viene eseguita dallo script?

Script:

a = 123456 
b = 123456 
print a is b # True 

Interactive modalità:

>>> a = 123456 
>>> b = 123456 
>>> a is b 
False 

stava dando diversi output sulla modalità Python Interactive e quando è stato eseguito da uno script.

Da this answer:

L'implementazione corrente mantiene un array di oggetti interi per tutti gli interi tra -5 e 256, quando si crea un int in tale intervallo è effettivamente solo tornare un riferimento all'oggetto esistente .

Quindi, mi sarei aspettato che a is b restituito True solo per numeri interi nella gamma [-5, 256]. Ma è vero solo in modalità interattiva, non quando è eseguito da uno script.

Domanda: Perché a is b si comporta in modo diverso in modalità interattiva e quando viene eseguito da uno script?


Nota: Testato in Python 2.7 e Python 3

+2

I risultati sono gli stessi su Python 3. 'False' per interattivo,' True' per script. – vaultah

+0

Python 3.3 si comporta come 2.7. È interessante notare che '>>> a = b; >>> a è b' restituisce 'Vero'. – Davidmh

risposta

1

La differenza è, come le costanti vengono gestiti. In modalità interattiva, non c'è modo di dire se una costante numerica è già presente o meno. Ma per il codice compilato, ogni costante viene salvata internamente in una tabella e i duplicati vengono rimossi. Ma questo è un dettaglio di implementazione, e non deve essere vero per ogni versione di Python.

Problemi correlati