2016-09-22 4 views
1

Ich las einen Artikel, dass Python einige Anzahl Objekte für eine bessere Leistung behält. Beispiel:Python integrierte Integer-Objekt

x = 3 
y = 3 
print(id(x)) 
print(id(y)) 

gibt die gleichen Werte aus, was bedeutet, dass x und y auf genau dasselbe Objekt verweisen. Der Artikel schlug vor, dass die Objekte mit beibehaltener Nummer ungefähr im Bereich von 1 bis 100 liegen.

Also testete ich für immer den genauen Bereich folgenden Code:

for i in range(-1000,1000): 
    x = int(str(i)) 
    y = int(str(i)) 
    if str(id(x)) == str(id(y)): 
     print(i) 

und das Ergebnis ist recht seltsam: es druckt -5 ~ 256.

Ich frage mich, woher diese beiden magischen Zahlen kommen und warum sie benutzt werden. Werden sich diese beiden Werte in einer anderen Umgebung ändern? Danke!

+1

Es ist ein CPython-Implementierungsdetail (Optimierung), nicht Python im Allgemeinen. –

+1

die Antwort ist, verwenden Sie nicht IDs für nicht veränderbare Typen – Julius

Antwort

1

256 ist eine Potenz von zwei und klein genug, dass Leute Zahlen in diesem Bereich verwenden würden.

-5 Ich bin weniger sicher, vielleicht als besondere Werte?

Verwandte: What's with the Integer Cache inside Python?

auch ein Wort der Weisheit von diesem Thread:

dies ist eine Implementierung Detail, verlassen Sie sich nicht immer darauf passiert oder nicht passiert

+0

danke! Ich glaube ich habe in falschen Stichwörtern gesucht. Der zugehörige Beitrag hat meine Frage gelöst! –