可能是重复问题:
"foo is None"和"foo == None"有什么区别?
这其实是一个很简单的问题。
"foo is None"和"foo == None"有什么区别呢?
if a.b is 'something':
并且
if a.b == 'something':
请原谅我的无知。
可能是重复问题:
"foo is None"和"foo == None"有什么区别?
这其实是一个很简单的问题。
"foo is None"和"foo == None"有什么区别呢?
if a.b is 'something':
并且
if a.b == 'something':
第一种检查的是身份(即是否为同一个对象),第二种检查的是相等性。
例子:
is
运算符进行的第一次操作基于内存中这些项目(例如字符串)所存储的位置,可能 或者 可能不 返回 True
。
a='this is a very long string'
b='this is a very long string'
a is b
False
经过检查,id() 函数显示它们存储在不同的位置。
id(a)
62751232
id(b)
62664432
==
)将会给出True
,因为这两个字符串是相等的。a == b
True
另一个例子展示了is
可以是True
或False
(与第一个例子相比),但==
按照我们的预期工作:
'3' is '3'
True
'3' == '3'
True
不出所料,这是我们所预期的。
我相信is
使用id()来确定是否引用了内存中相同的对象(有关详细信息,请参见下面的@SvenMarnach评论)。
if a.b is None
的情况下使用过 is
。还有其他的例子可以使用它吗(例如,您会将其用于比较对象实例吗?) - Robert Johnstonea is b
是当a
和b
是同一个对象时为真。它们可以比较相等,但是可能是不同的对象,例如:
>>> a = [1, 2]
>>> b = [1, 2]
>>> c = b
>>> a is b
False
>>> a is c
False
>>> b is c
True
>>> a == b == c
True