首先說結論:
1、is, is not 對比的是兩個變量的內存地址
2、==,!= 對比的是兩個變量的值
由此可以進一步推出:
a、假如比較的兩個變量,指向的都是不可變的類型(str, tuple等),那麼is,is not 和 ==,!= 是完全等價的。
b、假如對比的兩個變量,指向的是不可變得類型(list,dict等),則兩者是有區別的。
現分別對這兩種情況加以說明:
1、比較的兩個變量均指向不可變類型
a="hello"
b="hello"
print(a is b, a==b) # 輸出爲 True, True
因爲"hello" 爲str 類型,所以兩者指向同一內存地址,故 is 和 == 輸出均爲 True.
2、比較的兩個變量均指向可變類型
a=["hello"]
b=["hello"]
print(a is b, a==b) # 輸出爲 False, True
雖然兩個列表的相同,但是因爲列表是可變類型,所以兩次賦值的內存地址是不一樣的,故 is 輸出爲False, == 輸出爲 True.