2015-10-06 151 views
1

在Python中:爲什麼變量保持相同的值在Python中具有公共ID?

>>> a = "Hello" 
>>> b = "Hello" 
>>> id(a) == id(b) 
True 

爲什麼?這能否在引用對象內存位置的複雜程序中產生問題?

+2

在Python中,你通常不會*「指的是存儲位置「* - 字符串是不可變的,所以* equal *字符串(相同順序中的相同字符)也可能是*相同*(同一確切對象)並不重要。當你真的指'str_a == str_b'時,你在生產代碼中依賴'str_a是str_b'時會出現問題,因爲雖然相同的字符串必然相等,但不能保證相反。 – jonrsharpe

+2

你正在看到字符串實習,http://stackoverflow.com/questions/28329498/why-does-a-space-effect-the-identity-comparison-of-equal-strings,你的例子將失敗與'a =「 $ foo「'和'b =」$ foo「',cpython將實習任何由任何字母,下劃線和數字組成的字符串,因爲使用了'$'字符串將不會被取消,所以絕對不能依賴它在 –

回答

3

the Python documentation

恆定類型[如字符串],即計算新 值實際上可能的參考返回到任何現有的對象與 相同的類型和值的操作。例如,後a = 1; b = 1ab可能會或可能 不是指同一個對象與價值之一,這取決於 執行...

+0

字符串不是由數字,字母或下劃線組成,除非你做了'a,b =「$ foo」,「$ foo」'或者字符串在函數中,否則不會被禁止。 a ='「$ foo'」和'b =「$ foo」'在解釋器中不會返回相同的ID。在cpython中,小型整數被緩存,所以它們總是會有相同的ID –

+1

您還需要解決*這是否會在複雜程序中引發問題,這些程序引用對象的內存位置* –

相關問題