1. 程式人生 > >python基礎(8)python中is和==的區別詳解

python基礎(8)python中is和==的區別詳解

# 前置知識點 當我們建立一個物件時,我們要知道它內部幹了些什麼 - 1.建立了一個隨機id,開闢了一片記憶體地址 - 2.自動聲明瞭這個物件的型別type - 3.給這個物件賦值value   ## 小例子 ``` a = 1 print(id(1)) print(id(a)) print(type(a)) ``` **結果** ``` 4470700832 4470700832 ``` 可以明顯看出數字1的記憶體地址跟物件a的記憶體地址是一樣的,`a = 1`的原理是首先記憶體中有一個`id=4470700832`,`type=int`,`value=1`的物件,然後建立a物件指向1,此時a的id、type、value跟1的一樣   # is和==的區別 上面分析了建立物件的整個記憶體過程,那麼接下來理解is和==的區別就好多了 - is:用於判斷兩個變數引用物件是否為同一個,既比較物件的地址。 - ==:用於判斷引用變數引用物件的值是否相等,預設呼叫物件的` __eq__()`方法。 ``` >>> a = 257 >>> b = 257 >>> id(a) 140204598140720 >>> id(b) 140204598140400 >>> print(a is b) False >>> print(a == b) True ``` 根據我們上面講解的,a的地址和b的地址應該跟257的地址相同,但是現在顯然不同,這是為什麼呢?下面會說明   # 整數快取問題 Python 僅僅對比較小的整數物件進行快取`(範圍為[-5, 256])`快取起來,而並非是所有整數物件。需要注意的是,這僅僅是在命令列中執行,而在` Pycharm `或者儲存為檔案執行,結果是不一樣 的,這是因為直譯器做了一部分優化(範圍是[-5,任意正整數])。   # 總結 - is 比較兩個物件的 id 值是否相等,是否指向同一個記憶體地址 - == 比較的是兩個物件的內容是否相等,值是否相等 - 小整數物件[-5,256]在全域性直譯器範圍內被放入快取供重複使用 - is 運算子比 == 效率高,在變數和 None 進行比較時,應該使