天天看點

Python中 is和 == 的差別Abstractis ==Python垃圾回收機制reference

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”?