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

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)

猜你喜歡

主站蜘蛛池模板: 这里只有久久精品视频 | 男人天堂avav | 亚洲爱婷婷色婷婷五月 | 激情综合五月婷婷 | 国产成人精品男人的天堂538 | 不卡久久 | 中文字幕99在线精品视频免费看 | 久久99精品久久久久久h | 亚洲免费视频在线 | 免费电视剧在哪里看 | 最新的国产成人精品2022 | 免费日韩在线视频 | 亚洲精品乱码久久久久久蜜桃欧美 | 激情五月婷婷基地 | 第四色激情 | 国产精品久久现线拍久青草 | 欧美精品在线视频 | 欧美一级久久久久久久久大 | 日本一区二区不卡视频 | 精品欧美一区二区三区精品久久 | 四虎永久网址 | 亚洲国产成人在线视频 | 亚洲国产精久久久久久久春色 | 久久国产高清波多野结衣 | 午夜视频福利 | 五色天| 国产福利第一视频 | 久久久福利 | 亚洲国产成人久久笫一页| 欧美日韩在线视频 | 久久婷婷五月综合色丁香 | 亚洲精品毛片久久久久久久 | 亚洲国产视频网 | 国内精品久久久久影院亚洲 | 亚洲国产精品成人久久 | 羞羞视频网页版 | 亚洲高清一区二区三区四区 | 武松金莲肉体交战在线观看 | 忍住波多野10分钟就可以中出 | 国产视频 每日更新 | 伊人久久综合视频 |