深入理解 Python 的 「 」 和 「is」

2021-08-08 01:28:41 字數 1296 閱讀 3723

python 3.6

.0 |anaconda 4.3

.1 (64-bit)| (default, dec 23

2016, 11:57:41) [msc v.1900

64 bit (amd64)] on win32

or"license"

for more information.

>>> obj1 = ["a", "b", "c"]

>>> obj2 = obj1

>>> obj1 is obj2

true

>>> id(obj1)

2104722816712

>>> id(obj2)

2104722816712

>>> obj2 = obj1[:]

>>> obj2 is obj1

false

>>> id(obj1)

2104722816712

>>> id(obj2)

2104722796360

>>> obj1 == obj2

true

實現原理

is 比較的是兩者是否是同乙個物件,所以比較的是記憶體位址(id是否相同)。

== 是值比較。不可變物件,,例如 int,str,它會直接進行值比較。對於python已知的物件,會呼叫他們的eq函式來比較。(其實已知的物件應該也是通過內建的eq函式來比較的)。對於自定義的物件,如果實現了eq函式,就會使用它比較,如果沒有實現,效果和 == 是一樣的。

>>> obj1 = 1

>>> obj2 = 1

>>> obj1 is obj2

true

>>> obj1 = 257

>>> obj2 = 257

>>> obj1 is obj2

false

>>> obj1 =256

>>> obj2 =256

>>> obj1 is obj2

true

>>> obj2 = -5

>>> obj1 = -5

>>> obj1 is obj2

true

>>> obj2 = -6

>>> obj1 = -6

>>> obj1 is obj2

false

#-5至257之間使用相同的數字,指向的同一片記憶體空間

python深入 Python的深入理解

處理檔案和目錄 python 3 帶有乙個模組叫做 os,代表 作業系統 operating system os 模組 包含非常多的函式用於獲取 和修改 本地目錄 檔案程序 環境變數等的資訊。python 盡最大的努力在所有支援的作業系統上提供乙個統一的api,這樣你就可以在保證程式能夠在任何的計算...

Python的深入理解

處理檔案和目錄 python 3 帶有乙個模組叫做 os,代表 作業系統 operating system os 模組 包含非常多的函式用於獲取 和修改 本地目錄 檔案程序 環境變數等的資訊。python 盡最大的努力在所有支援的作業系統上提供乙個統一的api,這樣你就可以在保證程式能夠在任何的計算...

深入理解Python類

c 中,類有兩個關鍵的內建函式,建構函式和析構函式。在python中,其實也有類似的函式,他們就是 def init self pass def del self pass def enter self pass def exit self pass在物件建立時執行操作。在物件析構時執行操作。注意 ...