2016-09-22 28 views
1

我讀過一篇文章,python保留了一些數字對象以獲得更好的性能。例如:python內置的整數對象

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

給出相同的值,這意味着x和y引用完全相同的對象。文章建議保留的數字對象大約在1〜100的範圍內。

所以我測試下面的代碼用於獲取的確切範圍:

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

,其結果是相當怪異:它打印出-5〜256。

我想知道這兩個神奇數字是如何來自以及爲什麼他們正在使用。另外,這兩個值會在不同的環境中變化嗎? 謝謝!

+1

這是一個CPython實現細節(優化),而不是一般的Python。 –

+1

答案是,不要使用ID爲非易變類型 – Julius

回答

1

256是一個二的力量,足夠小,人們會使用該範圍的數字。

-5我不太確定,或許作爲特殊的價值?

相關:What's with the Integer Cache inside Python?

同樣的智慧,從該線程的一句話:

這是一個實現細節,永遠不要依賴於它的發生或不發生

+0

謝謝!我想我搜索了錯誤的關鍵字。相關的帖子解決了我的問題! –