- is, is not 对比的是两个变量的内存地址
- ==, != 对比的是两个变量的值
a = ["hello"]
b = ["hello"]
print(a is b, a == b) # False True
print(a is not b, a != b) # True False
False True
True False
- 比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。
- 对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。
注:
- 不可变数据类型: 当该数据类型对应变量的值发生了改变时,它对应的内存地址也会发生改变。对于这种数据类型,就称不可变数据类型。Number(数字)、String(字符串)、Tuple(元组)
- 可变数据类型 :当该数据类型对应变量的值发生了改变时,它对应的内存地址不发生改变,对于这种数据类型,就称可变数据类型。List(列表)、Dictionary(字典)、Set(集合)
例如
a = "hello" #a 是地址,hello是变量值
b = "hello"
print(a is b, a == b)#因为变量为字符串,为地址不可变类型,所以is,和==完全等价
True True