真的是一个很简单的问题。
有什么区别:
if a.b is 'something':
和
if a.b == 'something':
原谅我的无知
真的是一个很简单的问题。
有什么区别:
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
or False
(与第一个例子相比),但==
按照我们期望的方式工作:
'3' is '3'
True
这意味着与上面示例中的两个较长字符串不同,这两个短文字都存储在同一内存位置。
'3' == '3'
True
不出所料,这是我们所期望的。
我相信is
使用id()来确定是否引用了内存中的相同对象(有关更多详细信息,请参阅下面的@SvenMarnach 评论)
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