Abstract
突然想到這個問題,就搜了搜,列出我看到的資料并進行整合
is ==
is 是引用相等(reference equality),用C語言來說,就是位址是否相同
== 是值相等(value equality)
is 表示的是對象标示符(object identity),我們在檢查 a is b 的時候,其實相當于檢查 id(a) == id(b)。而檢查 a == b 的時候,實際是調用了對象 a 的 eq() 方法,
官方文檔
The operators <, >, ==, >=, <=, and != compare the values of two objects.
The operators is and is not test for object identity: x is y is true if and only if x and y are the same object. Object identity is determined using the id() function. x is not y yields the inverse truth value.
Python垃圾回收機制
在python中的GC垃圾回收機制中,當定義兩個相同的字元串引用計數為0,觸發垃圾回收。其中python為了優化速度,使用了小整數池對象池,避免為整數頻繁申請和銷毀記憶體空間。
即:整數定義在[-5,257)這些對象是python提前建立好的,不會被垃圾回收,在python中,所有位于這個範圍内的整數使用的都是同一個對象,即指向同一個記憶體空間。而不在這個小整數池裡面的整數,每一個大整數,均建立一個新的對象,這些也被成為大整數池!總結:小整數[-5,257)和單個字元為共用對象,是常駐記憶體。
當字元串中出現了非辨別符允許的字元的時候才不采取駐留
reference
知乎回答①
知乎回答②
StackOverflow:Is there a difference between “==” and “is”?