国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中is與==判斷的區別

2020-02-23 04:30:33
字體:
來源:轉載
供稿:網友

在 Python 中,比較兩個對象(變量)是否相等,可以用 “is” 和 “==” 操作,但它倆有什么區別?什么時候用 “is”,什么時候用 “==” ?在面試時,發現不少候選人很難把這兩者完全說清楚,因此在這篇文章中,「Python之禪」將對二者進行深入淺出的對比介紹。

先舉個例子

小黃最近手頭非常寬裕,花重金購買了一輛 P90D 特斯拉,我們暫且給這車取名叫 "小P" ,這輛車和隔壁老王家的車(車名叫 "小 王")是一模一樣的,無論是型號、外表還是價格都一樣,是同批次生產的。這里我們可以說 "小P" 和"小王"是兩輛一模一樣的、相等的( euqal ),但本質上這是兩個不同的對象。有一天小君給他的愛車又取了一個網名叫 "愛駒",當我們說 "小P" 的時候其實就是在討論 "愛駒",因為本質上兩個名字指的是同一個對象,這里我們把 "小P" 和 "愛駒" 稱為完全相等的( identical )。

在 Python 中,”==” 和 “is” 的區別可類比這個例子 ,前者是相等性比較,比較的是兩個對象中的值是否相等,后者是一致性比較,比較的是兩個對象的內存空間地址是否相同。

​顯然,如果內存地址相同,那么他們的值肯定也是一樣的,因此,如果 “is” 返回 True,那么 “==” 一定也返回 True,反之卻不成立。

talk is cheap, show me the code

先創建一個列表對象,然后給它指定一個名字 a,再定義另外一個變量 b,讓它指向同一個對象。

>>> a = [1, 2, 3]>>> b = a

a 和 b 打印的值都是相等的,因為這兩個變量指向的是同一個對象,就好比給一輛車起了兩個不同的名字。

>>> a[1, 2, 3]>>> b[1, 2, 3]

理所當然, is 和 == 都返回 True。

>>> a == bTrue>>> a is bTrue

創建一個新的對象,盡管值是一樣的,但是他們本質上是兩個不同的對象,處在兩個不同的內存空間,因此 "is" 返回的是 False。

>>> c = [1,2,3]>>> a is cFalse

有且當僅比較的兩個變量指向同一個對象時 "is" 才返回 True,而 "==" 最終取決于對象的 __eq__() 方法,本質上兩個變量進行 "==" 比較操作調用的是對象的 __eq__() 方法。例如:

>>> class Foo(object):    def __eq__(self, other):      return True>>> f = Foo()>>> f == 1True>>> f == NoneTrue>>> f is NoneFalse

因為自定義類 Foo 的 eq 方法恒返回 True,因此它與任何對象進行 "==" 都是返回 True。而它與 None 是兩個不同的對象,因此 'is' 操作返回的是 False。

最后請大家思考這段代碼,為什么同樣的操作會有不同的結果

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 三门县| 南华县| 湟源县| 凤翔县| 汝州市| 应城市| 揭东县| 皮山县| 紫金县| 碌曲县| 寻甸| 滁州市| 东至县| 太仓市| 嘉峪关市| 桐乡市| 开远市| 阳江市| 宁波市| 慈利县| 柏乡县| 合肥市| 务川| 霍州市| 安丘市| 焉耆| 宜宾县| 泰和县| 鹤庆县| 宣恩县| 开化县| 清河县| 台前县| 锡林浩特市| 米易县| 陆川县| 连南| 钟山县| 西昌市| 黄石市| 江安县|