==用来检查两个对象是否相等,而is用来检查两个对象是否相同(是同一个对象)。
警告:不要将is用于数和字符串等不可变的基本值。
x = [1, 2, 3]
y = [2, 1]
del x[2]
y.reverse()
print(x == y, x is y) # True False
# id()函数可以查看变量在内存中具体的存储空间
print(id(x), id(y)) # 2487285428808 2487285429512
is表示的是对象标示符(object identity),而==表示的意思是相等(equal)。
is的作用是用来检查对象的标示符是否一致的,也就是比较两个对象在内存中是否拥有同一块内存空间,它并不适合用来判断两个字符串是否相等。而==才是用来检查两个对象的值是否相等的,它实际调用内部__eq__()方法,因此a==b相当于a.__eq__(b),所以==操作符是可以被重载的,而is不能被重载。
一般情况下,如果x is y为True的话x == y的值也为True(特殊情况除外,如NaN),反之则不然。
a = float('NaN')
print(a is a, a == a) # True False
Python中的string interning(字符串驻留)机制所决定的:对于较小的字符串,为了提高系统性能会保留其值的一个副本,当创建新的字符串的时候直接指向该副本即可。
# 不同变量组id()以及is和==的求值结果
a, b = "Watkins", "Watkins"
print(id(a), id(b)) # 2889860239856 2889860239856
print(a is b, a == b) # True True
al = "Watkins" * 3
bl = "Watkins" * 3
print(id(al), id(bl)) # 2889861024984 2889862756944
print(al is bl, al == bl) # False True
str1, str2 = "string", ''.join(['s', 't', 'r', 'i', 'n', 'g'])
print(id(str1), id(str2)) # 2889860357288 2889862775560
print(str1 is str2, str1 == str2) # False True
(最近更新:2019年04月11日)
172

被折叠的 条评论
为什么被折叠?



