亚洲情人网-亚洲情人-亚洲欧洲综合-亚洲欧洲自拍-欧美专区亚洲

is的意思(emphasis的意思)

  • 生活
  • 2023-04-28 12:18

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

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

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

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

>>>a=5>>>b=5>>>a==bTrue>>>aisbTrue

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

>>>a=1000>>>b=1000>>>a==bTrue>>>aisbFalse

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

>>>a=[]>>>b=[]>>>a==bTrue>>>aisbFalse

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

>>>a=1000>>>b=1000>>>a==bTrue>>>aisbFalse>>>a=b>>>a==bTrue>>>aisbTrue

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

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

>>>id(a)2047616

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

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

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

>>>a=5>>>id(a)1450375152>>>b=5>>>id(b)1450375152

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

>>>a=1000>>>id(a)12728608>>>b=1000>>>id(b)13620208

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

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

>>>a=[1,10,100,1000]>>>b=[1,10,100,1000]>>>a==bTrue>>>aisbFalse>>>id(a)12578024>>>id(b)12578056

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

>>>a=1000>>>b=2000>>>id(a)2047616>>>id(b)5034992>>>a=b>>>id(a)5034992>>>id(b)5034992>>>a2000>>>b2000

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

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

>>>a=[1,2,3]>>>id(a)5237992>>>b=a>>>id(b)5237992>>>a.append(4)>>>a[1,2,3,4]>>>b[1,2,3,4]

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

>>>importcopy>>>a=[1,2,3]>>>b=copy.deepcopy(a)>>>id(a)39785256>>>id(b)5237992

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

>>>a=[1,2,3]>>>id(a)39785256>>>b=a[:]>>>id(b)23850216>>>a.append(4)>>>a[1,2,3,4]>>>b[1,2,3]

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

--END--

喜歡本文的同學記得轉發+點贊~

更多內容,歡迎大家關注我們的公眾號:為AI吶喊(weainahan)

猜你喜歡

主站蜘蛛池模板: 日韩视频第1页 | 在线观看国产一区亚洲bd | 伊人激情久久综合中文字幕 | 欧美色爽 | 自拍偷拍欧美 | 国产精品久久久久久久久久一区 | 一级午夜视频 | www.激情五月 | 亚洲六月丁香色婷婷综合久久 | 中文字幕在线不卡精品视频99 | 久久精品视频亚洲 | 亚洲一区二区在线成人 | 久久五月天综合网 | 欧美日韩国产成人精品 | 亚洲综合久久久久久中文字幕 | 九月婷婷开心九月 | 国产在线观看黄 | 丁香六月天婷婷 | 欧美激情一区二区三区蜜桃视频 | 在线理论视频 | 国内精品视频成人一区二区 | 亚洲综合春色另类久久 | 男女羞羞的视频网站在线观看 | 亚洲综合色丁香婷婷六月图片 | 久久久小视频 | 黑人毛片| 午夜羞羞视频 | 亚洲电影免费 | 在线观看精品视频一区二区三区 | 电影网站在线观看 | 四色在线精品免费观看 | 最爱日本电视剧在线观看免费 | 亚洲一区二区三区高清 不卡 | 日韩国产成人精品视频 | 亚洲国产成人久久精品图片 | 小草影院在线观看播放 | 国产精品资源网站在线观看 | 久久久久久久国产视频 | 中文字幕精品视频在线 | 九九成人免费视频 | 日本不卡视频一区二区三区 |