python時常常會用到對兩個物件進行對比,有點c語言基礎的人都會想到用『==』,但python提供了一種更為優雅的寫法『is』。但在實際中,兩者之間還是有區別的,在某些情況下並不通用。
首先明確:
1)python中一切都是物件;
2)python中none是唯一的;
以下對『is』 與『==』的區別進行說明。
看下面例子:
>>> foo = [1]
>>> bar = [1]
>>> foo is bar # foo、bar不是同乙個物件
false
>>> foo == bar # foo、bar的值相等
true
>>> id(foo) # 注意引數必須為引用,如果是物件則不符合此規則
32658856 # 不同電腦上可能結果不同
>>> id(bar)
32658696
根據上述3),foo、bar是兩個引用,指向不同的位址空間,所以兩者不相等,而foo、bar的內容相等。來看foo、bar的記憶體位址,兩者是不一樣的。
由此,python中『is』是對兩個物件進行比較。
但是,
>>> foo = 257
>>> foo is 257
false
>>> foo = 256
>>> foo is 256
true
>>> bar = -6
>>> bar is -6
false
>>> bar = -5
>>> bar is -5
true
這是因為python中int物件用c實現時,其引用的快取範圍是(-5,,256)(包括邊界值)
而『==』是由 __ep__() 方法決定的:
>>> class foo(object):
def __eq__(self, other): # 定義__ep__()方法,讓其返回true
return true
>>> f = foo()
>>> f == none # 不管'=='右側為什麼,結果均為true
true
>>> f is none
false
由以上還可得出:__eq__()方法可以自定義,而『is』則不行。
另外,由上述2),
>>>none is none # 永遠為true
true
>>>none == none
true
因此,在使用中要注意兩者的區別。在對兩個值進行比較時選擇'==',比較兩個物件時選擇'is'。
參考:stackoverflow
python is 與 的區別
在了解is 與 這兩種運算子區別之前,首先要知道python中物件包含的三個基本要素,分別是 id 身份標識 type 資料型別 和 value 值 x 123 print id x 4305324896 id獲取變數記憶體位址 print type x typ獲取e變數的型別 首先看下list l...
python is和 的區別
在 python 中會用到物件之間比較,可以用 也可以用 is 但是它們的區別是什麼呢?is 比較的是兩個例項物件是不是完全相同,它們是不是同乙個物件,占用的記憶體位址是否相同。萊布尼茨說過 世界上沒有兩片完全相同的葉子 這個is正是這樣的比較,比較是不是同一片葉子 即比較的id是否相同,這id類似...
Python is 和 的區別
i1 205464113 i2 205464113 i3 i1 print id i1 print id i2 print id i3 print i1 is i2 print i1 i2 print i1 is i3 print i1 i3 print f1 1.574 f2 1.574 f3 f...