'is' in Python

  在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”运算符用于比较 像“数值”和“字符串”

这种不可变的值。

posted @ 2014-03-12 21:47  XiaoweiLiu  阅读(420)  评论(0编辑  收藏  举报