2013-07-25 65 views
0

我有以下Python代碼,做一個字符串比較:Python:some_string [0:3]的類型是什麼?

>>> mf="moo foo" 

>>> mf[0:3] 
'moo' 

>>> mf[0:3] is "moo" 
False 

>>> mf[0:3] == "moo" 
True 

>>> str(mf[0:3]) is "moo" 
False 

所以雙等於運算符返回true,但蟒蛇is運算符返回false。這一定是因爲他們不是同一個對象。

str[n:m]獲得的字符序列與同一字符串的文字表示('moofoo')之間的技術區別是什麼?他們爲什麼不是同一個對象?平等

+0

部分原因是由於Java的字符串。不管用於獲取「字符串」的方法,「字符串」或多或少保持相同的對象。 –

+1

呃......不。甚至沒有在Java中。嘗試:'的System.out.println(「山貓」 .substring(0,3)==「鮑勃」);表示字符的相同序列' – user2357112

+0

兩個字符串可以是或可以不是相同的對象。在Python和Java中都是如此。 – user2357112

回答

5

is測試以及相同的對象ID(在CPython的,這是在存儲器中的對象的地址)。 str(...)和切片創建一個淺拷貝,因此is測試失敗。

==測試爲相等的值。 is測試對象身份。

Python's Mailing List

報價「是」使我們能夠區分如果系統保持的兩件事情,只是看起來很相像,或實際上是相同的東西的軌道 。這裏的混亂

+0

淺拷貝意思是一個新的臨時引用或對象?什麼是對象ID?它是否與對象引用相同? ---編輯---好吧,給這些條款我可以谷歌的細節。謝謝。 –

+0

是的。你可以通過'id(var)'獲得對象ID。 –

+0

淺拷貝創建一個新對象,然後將嵌套對象的引用插入到該對象中。 –

相關問題