两个字符串变量被设置为相同的值。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
为什么会这样?
当前回答
这是一个边注,但在惯用的Python中,你经常会看到这样的东西:
if x is None:
# Some clauses
这是安全的,因为保证有一个Null对象的实例(即None)。
其他回答
基本概念,我们必须清楚,在处理这个问题时,是理解is和==之间的区别。
is将比较内存位置。如果id(a)==id(b),则a是b返回true,否则返回false。
所以,我们可以说is是用来比较内存位置的。然而,
==用于相等性测试,这意味着它只比较结果值。下面显示的代码可以作为上述理论的一个例子。
Code
对于字符串字面值(未分配给变量的字符串),内存地址将与图中所示相同。所以,id (a) (b) = = id。剩下的是不言自明的。
如果你不确定你在做什么,使用'=='。 如果你对它有更多的了解,你可以用'is'来表示已知的对象,比如'None'。
否则,你最终会想知道为什么事情不管用,为什么会发生这种情况:
>>> a = 1
>>> b = 1
>>> b is a
True
>>> a = 6000
>>> b = 6000
>>> b is a
False
我甚至不确定在不同的Python版本/实现之间是否保证有一些东西保持不变。
这是一个边注,但在惯用的Python中,你经常会看到这样的东西:
if x is None:
# Some clauses
这是安全的,因为保证有一个Null对象的实例(即None)。
is关键字是测试对象身份,而==是值比较。
如果使用is,当且仅当对象是同一对象时,结果将为真。但是,当对象的值相同时,==将为真。
将比较内存位置。它用于对象级比较。
==将比较程序中的变量。它用于在值级别上进行检查。
是否检查地址级别等价性
==检查值级别是否等价