可能重复:
Is there any difference between “foo is None” and “foo == None”?
真的很简单。
区别:
if a.b is 'something':
和
if a.b == 'something':
请原谅我的无知
答案 0 :(得分:5)
第一次检查身份第二次相等。
示例:
使用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评论)
答案 1 :(得分:3)
a 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