2017-07-19 2 views
0

In Python 3:Seit wann werden Integer-Werte zwischengespeichert und in Python wiederverwendet?

>> X = 42 
>> Y = 42 
>> X is Y 
True 

>> X = 2 ** 20 
>> Y = 2 ** 20 
>> X is Y 
False 

>> X = 2 ** 2 
>> Y = 2 ** 2 
>> X is Y 
True 

Was ist der genaue Wert für ganze Zahlen seit dem ich anstelle von True immer Falsch beginnen, wenn ich sage, „X Y“? (Angenommen, ich verwende Standard Python 3).

+0

Das klingt wie die Art von Problem, das ein Programm lösen sollte ... –

Antwort

1

Dies ist Interpreter abhängig (d. H. Es gibt keine Spezifikationen, die solche Zwischenspeicherung erfordern). Aber soweit ich weiß, hat der python Interpreter einen Cache für ganze Zahlen bis einschließlich . Darüber hinaus werden Werte bis einschließlich -5 zwischengespeichert. So ist der Bereich -5 bis 256 (beide eingeschlossen), wie in der schriftlichen documentation:

Die aktuelle Implementierung eines Arrays von ganzzahligen Objekte für alle ganzen Zahlen zwischen -5 und 256 (..) hält

Sie also besser nie Referenz verwenden Gleichheit zu prüfen, ob zwei Zahlen gleich sind, immer == verwenden. Dies ist auch nützlich, wenn Sie zum Beispiel einen int mit einem numpy int16 vergleichen würden. Wenn Sie Referenzprüfungen verwenden, schlägt Folgendes fehl:

>>> np.int16(12) is 12 
False 
>>> np.int16(12) == 12 
True 
Verwandte Themen