2014-06-08 21 views
6

在試圖回答一個有關使用is關鍵字的問題,我想通了,這樣的代碼:爲什麼「a是b」在交互模式下以及從腳本運行時表現不同?

腳本:

a = 123456 
b = 123456 
print a is b # True 

交互模式:

>>> a = 123456 
>>> b = 123456 
>>> a is b 
False 

在Python交互模式和從腳本運行時提供了不同的輸出。

this answer

當前實現保持整數對象爲-5和256之間的所有整數數組,當你在這個範圍內創建一個int,你其實只是回到現有對象的引用。

所以,我預計a is b僅在範圍[-5, 256]整數返回True。但只有在交互模式下才是正確的,而不是從腳本運行。

問題:爲什麼a is b在交互模式和從腳本運行時表現不同?


注:在Python 2.7和Python 3

+2

Python 3上的結果是一樣的。「False」表示交互式,「True」表示腳本。 – vaultah

+0

Python 3.3表現爲2.7。有趣的是,>>> a = b; >>> a是b'返回'True'。 – Davidmh

回答

1

不同的是,常量是如何處理的測試。在交互模式下,如果數字常量已經存在或不存在,則無法說明。但對於編譯的代碼,每個常量都內部保存到一個表中,並刪除重複項。但是這是一個實現細節,並且不必爲每個Python版本都爲真。

相關問題