==:判断两个量的“值”是否相同
基本语法: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
例2仅仅是把b = a换成了b = [1,2,3],这两者有本质的差异,后者重新开辟了一块内存,并把他的值设置为[1,2,3],然后将b指向这块内存。显然a == b是True,因为值相同;而a is b为False,因为两者指向了不同的内存地址。
网友评论