'is' in Python

本文探讨了Python中'is'运算符在比较不可变对象如字符串和数值时可能出现的问题,并通过示例解释了为什么应当谨慎使用'is'而非'=='进行比较。

  在Python中应该避免将“is”运算符用于比较 像“数值”和“字符串”这种不可变的值。由于Python内部操作这些对象的方式,使得对这些对象使用“is”运算符的结果将是不可预测的。

  下面以两个例子加以说明:

# DEMO 1:
x = y = [1, 2, 3]
z = [1, 2, 3]

print("'x == y' gets ", x == y)
print("'x == z' gets ", x == z)

print("'x is y' gets ", x is y)
print("'x is z' gets ", x is z)


# DEMO 2:
a = b = 'hello'
c = 'hello'

print("'a == b' gets ", a == b)
print("'a == c' gets ", a == c)

print("'a is b' gets ", a is b)
print("'a is c' gets ", a is c)

  DEMO 1的结果没有问题:

'x == y' gets  True
'x == z' gets  True
'x is y' gets  True
'x is z' gets  False

  对于DEMO 2的结果:

'a == b' gets  True
'a == c' gets  True
'a is b' gets  True
'a is c' gets  True

  对于DEMO 2的结果,我们能够理解出现这一结果的原因('hello'是一个字符串常量并且不可改变的,当定义第二个

字符串常量时,由于其与第一个常量值相同,所以 Python不会再次申请一段空间用于存储这一字符串常量--因为这个字符

串常量不会改变,而是直接使用前面已经定义过的字符串常量;因此后来定义的c和先前定义的a,b其实都是同一对象)。

但是,这和我们使用is的本意可能并不一致,所以,在Python中应该避免将“is”运算符用于比较 像“数值”和“字符串”

这种不可变的值。

转载于:https://www.cnblogs.com/lxw0109/p/is_in_python.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值