[Python] is与==的区别

==是比较运算符,用于比较两个值是否相等,结果返回布尔类型True或False

is操作符是比较值所在的内存地址是否相同,结果返回布尔类型True或False

aList = ['a','b','c']
bList = ['a','b','c']
# True
print(aList == bList)
# False
print(aList is bList)

# 1282636127624
print(id(aList))
# 1282636127368
print(id(bList))

由于aList和bList内存地址不相同,即使值是一样的,结果仍返回False

字典dict和元组Tuple也会出现上述同样的情况,is操作符返回的结果也是False 

aDict = {'a':1,'b':2}
bDict = {'a':1,'b':2}
# True
print(aDict == bDict)
# False
print(aDict is bDict)

# 1282572984184
print(id(aDict))
# 1282573081192
print(id(bDict))
aTuple = ('a','b','c','d')
bTuple = ('a','b','c','d')
# True
print(aTuple == bTuple)
# False
print(aTuple is bTuple)

# 1282636178280
print(id(aTuple))
# 1282636178920
print(id(bTuple))

数值类型、字符串(string)以及布尔值(bool)使用==比较运算符以及is操作符的时候,返回的结果都是True

a = 12
b = 12
# True
print(a == b)
# True
print(a is b)

# 1455517088
print(id(a))
# 1455517088
print(id(b))
aStr = 'Andy'
bStr = 'Andy'
# True
print(aStr == bStr)
# True
print(aStr is bStr)

# 1282635725992
print(id(aStr))
# 1282635725992
print(id(bStr))
aBool = True
bBool = True
# True
print(aBool == bBool)
# True
print(aBool is bBool)

# 1455026336
print(id(aBool))
# 1455026336
print(id(bBool))

== 与 is操作符返回的结果取决于它们传入的数据类型 

问题: a is b为True,a == b一定为True吗?

a = ['a','b','c']
b = a
# True
print(a is b)
# True
print(a == b)
a = float('nan')
b = a
# True
print(a is b)
# False
print(a == b)

nan和任何值进行==比较(包括与它自己比较)返回结果都是False 

猜你喜欢

转载自blog.csdn.net/Hudas/article/details/130461297