Python|Python “is”和“==”的区别


Python|Python “is”和“==”的区别
文章图片
1.jpg
==:判断两个量的“值”是否相同
基本语法:A == B
返回bool值,当A和B的值相同时,返回True,否则返回False。
is:判断两个量的“内存地址”是否相同
基本语法:A is B(即判断id(A)是否等于id(B))
返回bool值,当A和B的内存地址相同时,返回True,否则返回False。
如果A is B为True,那么A==B必然也是True,因为同一块地址肯定只能存一个值;反过来则不成了,如果A==B为True,A is B不一定为True,因为相同的值可以存储在不同的内存中。因此is判断比==更严格。
例1:

>>>a = [1,2,3] >>>b = a >>>print(a == b) True >>>print(a is b) True >>>print(id(a)) 96345160 >>>print(id(b)) 96345160

上例中,a = [1,2,3],首先开辟了一块内存地址,并将该地址的值设置为[1,2,3],然后将变量(引用)a指向这块内存。b=a则是将变量(引用)b也指向这块内存地址(python决定了这种“变量之间的直接赋值方式”不会新开辟一块内存),结果就是a和b指向相同的地址,当然值也相同。因此a is b 和a == b 的结果都是True。
例2:
>>>a = [1,2,3] >>>b = [1,2,3] >>>print(a == b) True >>>print(a is b) False >>>print(id(a)) 96653000 >>>print(id(b)) 96615176

【Python|Python “is”和“==”的区别】例2仅仅是把b = a换成了b = [1,2,3],这两者有本质的差异,后者重新开辟了一块内存,并把他的值设置为[1,2,3],然后将b指向这块内存。显然a == b是True,因为值相同;而a is b为False,因为两者指向了不同的内存地址。

    推荐阅读