前言
在講is和==這兩種運算子區別之前,首先要知道python中bdzox物件包含的三個基本要素,分別是:id(身份標識)、python type()(資料型別)和value(值)。is和==都是對物件進行比較判斷作用的,但對物件比較判斷的內容並不相同。下面來看看具體區別在哪。
python中比較兩個物件是否相等,一共有兩種方法,簡單來說,它們的區別如下:
is是比較兩個引用是否指向了同乙個物件(引用比較)。
==是比較兩個物件是否相等。
>>> a = [1, 2, 3]
>>> b = a
>>> b is a # a的引用複製給b,他們在記憶體中其實是指向了用乙個物件
true
>>> b == a # 當然,他們的值也是相等的
true
>>> b = a[:] # b通過a切片獲得a的部分,這裡的切片操作重新分配了物件,
>>> b is a # 所以指向的不是同乙個物件了
false
>>> b == a # 但他們的值還是相等的
true
實現原理
is比較的是兩者是否是同乙個物件,所以比程式設計客棧較的是記憶體位址(id是否相同)。
==是值比較。不可變物件,例如int,str,它會直接進行值比較。對於python已知的物件,會呼叫他們的__eq__函式來比較。(其實已知的物件應該也是通過內建的__eq__函式來比較的)。對於自定義的物件,如果實現了__eq__函式,就會使用它比較,如果沒有實現,效果和==是一樣的。
物件快取機制
python會對比較小的物件快取,下次用到比較小的物件時,會去快取區查詢,如果找到,不會再開闢新的記憶體,而是繼續把小物件的位址賦給新的值。例子:
>>> c = 1
>>> d = 1
>>> print(c is d)
true
>>> 1000 is 10**3
false
>>> 1000 == 10**3
true
通過計算得到的賦值,不會使用快取區。從第乙個**示例中可以看出。
對於字串,你可以通過使用intern函式強制使用快取區。
總結本文標題: python中運算子"=="和"is"的詳解
本文位址: /jiaoben/python/165758.html
python中的運算和運算子
運算 由乙個以上的值經過變化得到新值得過程,就是運算。運算子 用於運算的符號,就是運算子 運算的分類 1.算數運算 2.比較運算 關係運算 3.賦值運算 4.邏輯運算 5.位運算 6.成員運算 7.身份運算 除法運算 加法運算 減法運算 乘法運算 除法運算 取餘運算 取商運算 地板除 冪運算 小於運...
C 中 運算子 和 運算子
運算子定義在將可空型別分配給非可空型別時返回的預設值。int?c null 若 c 為 null,則 d 為 1,否則把 c 值賦予 d int d c 1 型別名稱後加問號,如 int?i null double?d null bool?b null 可指定可為 null 的 int double...
python 運算子 Python運算子
python語言支援以下型別的運算子 算術運算子 比較 關係 運算子 賦值運算子 邏輯運算子 位運算子 成員運算子 身份運算子 運算子優先順序 1 算術運算子 加號 減號 乘 除 取餘 乘方 整除 1 其中除號 要注意 在python2中,用作整除。解決方法有三 1 兩個相除的數中有乙個為實數。2 ...