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
I risultati sono gli stessi su Python 3. 'False' per interattivo,' True' per script. – vaultah
Python 3.3 si comporta come 2.7. È interessante notare che '>>> a = b; >>> a è b' restituisce 'Vero'. – Davidmh