两个字符串变量被设置为相同的值。s1 == s2总是返回True,但s1 = s2有时返回False。
如果我打开我的Python解释器,并做同样的比较,它成功了:
>>> s1 = 'text'
>>> s2 = 'text'
>>> s1 is s2
True
为什么会这样?
两个字符串变量被设置为相同的值。s1 == s2总是返回True,但s1 = s2有时返回False。
如果我打开我的Python解释器,并做同样的比较,它成功了:
>>> s1 = 'text'
>>> s2 = 'text'
>>> s1 is s2
True
为什么会这样?
当前回答
如果你不确定你在做什么,使用'=='。 如果你对它有更多的了解,你可以用'is'来表示已知的对象,比如'None'。
否则,你最终会想知道为什么事情不管用,为什么会发生这种情况:
>>> a = 1
>>> b = 1
>>> b is a
True
>>> a = 6000
>>> b = 6000
>>> b is a
False
我甚至不确定在不同的Python版本/实现之间是否保证有一些东西保持不变。
其他回答
Is是同一性测试,==是相等性测试。这意味着is是一种检查两件事物是否相同或等价的方法。
假设你有一个简单的person对象。如果它的名字是“Jack”,而且是“23岁”,那么它就相当于另一个23岁的Jack,但它不是同一个人。
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __eq__(self, other):
return self.name == other.name and self.age == other.age
jack1 = Person('Jack', 23)
jack2 = Person('Jack', 23)
jack1 == jack2 # True
jack1 is jack2 # False
他们年龄相同,但他们不是同一个人。一个字符串可能与另一个字符串等价,但它不是同一个对象。
Is是同一性测试,==是相等性测试。在你的代码中发生的事情将在解释器中模拟,就像这样:
>>> a = 'pub'
>>> b = ''.join(['p', 'u', 'b'])
>>> a == b
True
>>> a is b
False
所以,难怪它们不一样,对吧?
换句话说,a等于b等于id(a) == id(b)
如果你不确定你在做什么,使用'=='。 如果你对它有更多的了解,你可以用'is'来表示已知的对象,比如'None'。
否则,你最终会想知道为什么事情不管用,为什么会发生这种情况:
>>> a = 1
>>> b = 1
>>> b is a
True
>>> a = 6000
>>> b = 6000
>>> b is a
False
我甚至不确定在不同的Python版本/实现之间是否保证有一些东西保持不变。
is关键字是测试对象身份,而==是值比较。
如果使用is,当且仅当对象是同一对象时,结果将为真。但是,当对象的值相同时,==将为真。
is是身份测试,==是相等测试(请参阅Python文档)。
在大多数情况下,如果a是b,那么a == b。但也有例外,例如:
>>> nan = float('nan')
>>> nan is nan
True
>>> nan == nan
False
所以,你只能在同一性测试中使用is,而不是相等性测试。