[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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值