成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

“==”和“is”有什么區別?一個問題就能暴露你的Python水平

開發 后端
“==”和“is”都是 Python 中的運算符。對于初學者,他們可能會把“ a==b ”解釋為“ a 等于 b ”,“a is b”也可以解釋為“ a是b ”。這可能就是初學者在 Python 中混淆“ == ”和“ is ”的原因。

可能在網上你經常能看到關于這個問題的答案和解析,但是依然有很多剛開始學習Python的人,不了解這個問題,也不知道為什么問這個問題時會暴露自己是“菜鳥”,這個問題就是:

“==” 和 “is”之間有什么區別?

“==”和“is”都是 Python 中的運算符。對于初學者,他們可能會把“ a==b ”解釋為“ a 等于 b ”,“a is b”也可以解釋為“ a是b ”。這可能就是初學者在 Python 中混淆“ == ”和“ is ”的原因。

在開始之前,我想先展示一些使用“==”和“is”的例子。

  1. >>> a = 5 
  2. >>> b = 5 
  3. >>> a == b 
  4. True 
  5. >>> a is b 
  6. True 

很簡單,對吧? a == b 和 a is b 都返回了結果 True。接下來我們看另一個示例:

  1. >>> a = 1000 
  2. >>> b = 1000 
  3. >>> a == b 
  4. True 
  5. >>> a is b 
  6. False 

WTF ?!? 從第一個示例到第二個示例的唯一變化就是 a 和 b 的值從 5 到 1000。但是返回的結果在 “ ==” 和 “ is” 已經不同。我們再看另一個示例:

  1. >>> a = [] 
  2. >>> b = [] 
  3. >>> a == b 
  4. True 
  5. >>> a is b 
  6. False 

下面是最后一個例子,看完是不是覺得自己的腦子要爆炸?

  1. >>> a = 1000 
  2. >>> b = 1000 
  3. >>> a == b 
  4. True 
  5. >>> a is b 
  6. False 
  7. >>> a = b  
  8. >>> a == b 
  9. True 
  10. >>> a is b 
  11. True 

“ ==”的正式運算是相等,而“ is”的運算是標識。 一般使用“ ==”來比較兩個對象的值。 “ a == b”應解釋為“ a的值是否等于b的值”。 在上述所有示例中,a 的值始終等于 b 的值(即使對于空列表示例也是如此)。 因此,“ a == b”始終為真。

在解釋身份之前,我需要先介紹 id 函數。 我們可以使用 id 函數獲得對象的標識。 這個身份在整個時間內對于此對象都是唯一且恒定的。此標識在整個時間內對該對象是唯一且不變的。你可以把它看作是這個對象的地址。如果兩個對象具有相同的標識,則它們的值也必須相同。

  1. >>> id(a) 
  2. 2047616 

運算符“ is ”是比較兩個對象的標識是否相同。“a is b”的意思是“a的身份與b的身份相同”。

如果你知道“ ==”和“ is”的實際含義,我們就可以開始研究上面的幾個示例了。

首先是第一個和第二個示例中的結果不同。 顯示不同結果的原因是Python存儲了一個介于-5到256之間的整數的數組列表,每個整數具有固定的標識。當我們在此范圍內分配整數變量時,Python會將此變量的標識分配為數組列表內整數的整數。 結果,對于第一個示例,由于a和b的標識都是從數組列表中獲得的,因此它們的標識當然是相同的,因此 “a is b” 為True。

  1. >>> a = 5 
  2. >>> id(a) 
  3. 1450375152 
  4. >>> b = 5 
  5. >>> id(b) 
  6. 1450375152 

但是一旦該變量的值超出該范圍,由于 Python 內部沒有具有該值的對象,因此Python將為此變量創建一個新的標識并將該值分配給該變量。 如前所述,身份對于每個創建都是唯一的,因此,即使兩個變量的值相同,其身份也永遠不會相等。 這就是為什么“a is b”在第二個例子結果為False。

  1. >>> a = 1000 
  2. >>> id(a) 
  3. 12728608 
  4. >>> b = 1000 
  5. >>> id(b) 
  6. 13620208 

PS:如果你打開了兩個控制臺,該值仍在該范圍內,那么你將獲得相同的標識。但是,如果該值不在該范圍內,則結果就會發生改變。

 

“==”和“is”有什么區別?一個問題就能暴露你的Python水平

如果你理解了第一示例和第二示例之間的區別,就很容易理解第三示例的結果。由于 Python 不存儲“空列表”對象,因此 Python 創建了一個新對象并分配了“空列表”值。無論兩個列表為空還是元素相同,結果都是相同的。

  1. >>> a = [1,10,100,1000] 
  2. >>> b = [1,10,100,1000] 
  3. >>> a == b  
  4. True 
  5. >>> a is b 
  6. False 
  7. >>> id(a) 
  8. 12578024 
  9. >>> id(b) 
  10. 12578056 

接下來,我們轉到最后一個示例。第二個和最后一個示例之間的唯一區別是還有一行代碼 a = b,正是這行代碼改變了變量 a 的命運。以下結果將告訴你真實原因:

  1. >>> a = 1000 
  2. >>> b = 2000 
  3. >>> id(a) 
  4. 2047616 
  5. >>> id(b) 
  6. 5034992 
  7. >>> a = b 
  8. >>> id(a) 
  9. 5034992 
  10. >>> id(b) 
  11. 5034992 
  12. >>> a 
  13. 2000 
  14. >>> b 
  15. 2000 

如上所示,在 a = b 之后,a 的身份更改為 b 的身份。a = b 將 b 的身份分配給 a 。因此 a 和 b 具有相同的標識,因此 a 的值現在與 b 的值相同(即2000)。

最后一個示例告訴我們一個重要消息,即我們可能會無意中更改對象的值,而不會事先通知,尤其是當對象是列表時。

  1. >>> a = [1,2,3] 
  2. >>> id(a) 
  3. 5237992 
  4. >>> b = a 
  5. >>> id(b) 
  6. 5237992 
  7. >>> a.append(4) 
  8. >>> a 
  9. [1, 2, 3, 4] 
  10. >>> b 
  11. [1, 2, 3, 4] 

在上面的示例中,由于 a 和 b 具有相同的標識,因此它們的值必須相同。 所以,在將新元素添加到 a 之后,b 的值也會受到影響。為避免這種情況,如果要將值從一個對象復制到另一個對象而不引用相同的標識,則所有方法之一是在 copy 模塊中使用 deepcopy 。 對于列表,我們還可以通過 b = a [:] 執行。

  1. >>> import copy 
  2. >>> a = [1,2,3] 
  3. >>> b= copy.deepcopy(a) 
  4. >>> id(a) 
  5. 39785256 
  6. >>> id(b) 
  7. 5237992 

使用[:]將元素復制到新變量。

  1. >>> a = [1,2,3] 
  2. >>> id(a) 
  3. 39785256 
  4. >>> b = a[:] 
  5. >>> id(b) 
  6. 23850216 
  7. >>> a.append(4) 
  8. >>> a 
  9. [1, 2, 3, 4] 
  10. >>> b 
  11. [1, 2, 3] 

看完以上內容,你是不是已經充分了解了兩者之間的不同?如果面試遇到這種問題,千萬別回答錯啦!

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2021-09-10 17:02:43

Python協程goroutine

2022-08-31 08:33:54

Bash操作系統Linux

2024-03-05 18:19:07

localhostLinux數據庫

2024-05-27 00:00:00

localhostIPv6IPv4

2020-03-09 20:56:19

LoRaLoRaWAN無線技術

2022-09-07 18:32:57

并發編程線程

2022-06-06 14:53:02

LoRaLoRaWAN

2022-09-08 18:38:26

LinuxWindowsmacOS

2020-11-09 14:07:53

PyQtQt編程

2021-12-17 14:40:02

while(1)for(;;)語言

2022-02-27 15:33:22

安全CASBSASE

2024-05-27 00:40:00

2021-05-16 14:26:08

RPAIPACIO

2022-08-02 08:23:37

SessionCookies

2024-09-09 13:10:14

2024-03-05 18:59:59

前端開發localhost

2023-11-01 08:08:47

PythonIS運算符

2023-10-27 15:31:04

For循環Foreach循環

2022-10-08 00:24:40

嵌套事務加入事務事務

2022-03-13 18:53:31

interfacetypeTypeScript
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 97色在线视频 | 色婷婷激情 | 欧美一区二区在线 | 日日人人| 欧美日韩亚洲一区 | 91精品国产综合久久婷婷香蕉 | 久久午夜视频 | 91精品久久久久久久久中文字幕 | 成人久草| 免费能直接在线观看黄的视频 | 在线成人一区 | 亚洲区一区二区 | 日韩电影中文字幕 | 欧美中文视频 | 日韩免费一区二区 | 精品久久久久久久久久久久久久 | 中文字幕国产第一页 | 久久日韩精品一区二区三区 | 国内精品视频免费观看 | 色婷婷亚洲国产女人的天堂 | 亚洲成人日韩 | www.嫩草 | 日韩精品一区二区三区在线观看 | 一区二区亚洲 | 伊人艹 | 在线观看日韩av | 日韩电影中文字幕 | 伊人激情综合网 | 美女天天操| 久久久av | 日韩在线中文字幕 | 国产一级在线 | 国产欧美一区二区三区在线看 | 一区二区三区久久 | 免费午夜视频在线观看 | 911影院| 欧美三级视频 | 在线播放一区二区三区 | 亚洲人一区 | 日本黄色一级片视频 | 欧美激情区 |