在Python中:爲什麼變量保持相同的值在Python中具有公共ID?
>>> a = "Hello"
>>> b = "Hello"
>>> id(a) == id(b)
True
爲什麼?這能否在引用對象內存位置的複雜程序中產生問題?
在Python中:爲什麼變量保持相同的值在Python中具有公共ID?
>>> a = "Hello"
>>> b = "Hello"
>>> id(a) == id(b)
True
爲什麼?這能否在引用對象內存位置的複雜程序中產生問題?
恆定類型[如字符串],即計算新 值實際上可能的參考返回到任何現有的對象與 相同的類型和值的操作。例如,後
a = 1; b = 1
,a
和b
可能會或可能 不是指同一個對象與價值之一,這取決於 執行...
字符串不是由數字,字母或下劃線組成,除非你做了'a,b =「$ foo」,「$ foo」'或者字符串在函數中,否則不會被禁止。 a ='「$ foo'」和'b =「$ foo」'在解釋器中不會返回相同的ID。在cpython中,小型整數被緩存,所以它們總是會有相同的ID –
您還需要解決*這是否會在複雜程序中引發問題,這些程序引用對象的內存位置* –
在Python中,你通常不會*「指的是存儲位置「* - 字符串是不可變的,所以* equal *字符串(相同順序中的相同字符)也可能是*相同*(同一確切對象)並不重要。當你真的指'str_a == str_b'時,你在生產代碼中依賴'str_a是str_b'時會出現問題,因爲雖然相同的字符串必然相等,但不能保證相反。 – jonrsharpe
你正在看到字符串實習,http://stackoverflow.com/questions/28329498/why-does-a-space-effect-the-identity-comparison-of-equal-strings,你的例子將失敗與'a =「 $ foo「'和'b =」$ foo「',cpython將實習任何由任何字母,下劃線和數字組成的字符串,因爲使用了'$'字符串將不會被取消,所以絕對不能依賴它在 –