python對變數賦值為什麼會出現以下的情況?

如下的賦值語句。

x=2
y=2
x is y
&>&>&> true
但是運行以下的代碼:
x=200000000
y=200000000
x is y
&>&>&> false

這是怎麼一回事呢?聽網上的解釋是數據長短的問題?本人python初學者,請各位不吝賜教,謝謝。


python裡面任何東西都是對象,好吧,不怎麼嚴謹。

程序中,比較小的數字對象太常見了,如果每次都動態創建銷毀這些對象,會造成很大的性能浪費,因此python對-5到257,好像是這個範圍,這些整數預先建立了對象,因此2 is 2 == True。超過這個範圍,就沒有必要預建立對象了,浪費內存。


Python 有小整數對象池,不必用到一個數就創建一個對象。

像 x=2, y=2 這樣就直接引用同一個對象,所以用 is 比較就 True 了啦。

但是顯然不可能在內存里維護 200000000 個數的對象嘛。


a = 10000000000000000
b = 10000000000000000
print a == b
print a is b

True
True

為什麼我的是這樣的。。。。。


推薦閱讀:

在同一台電腦下如何進行 Python 2 與 3 的切換?
python3是如何處理字元異常的?
python3.5 pip 安裝lxml出錯?
python3如何查找list1中有而list2中沒有的元素??
為何我用sublime text3編譯python turtle畫圖後窗口自動關閉?

TAG:Python | Python3x | Python入門 |