6

可能重复:
“foo is None”和“foo == None”之间有什么区别吗?

真的是一个很简单的问题。

有什么区别:

if a.b is 'something':

if a.b == 'something':

原谅我的无知

4

2 回答 2

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可以是Trueor False(与第一个例子相比),但==按照我们期望的方式工作:

'3' is '3'
True

这意味着与上面示例中的两个较长字符串不同,这两个短文字都存储在同一内存位置。

'3' == '3'
True

不出所料,这是我们所期望的。

我相信is使用id()来确定是否引用了内存中的相同对象(有关更多详细信息,请参阅下面的@SvenMarnach 评论)

于 2012-05-31T11:03:09.873 回答
3

a is b如果ab同一个对象,则为真。它们可以比较相等,但可以是不同的对象,例如:

>>> a = [1, 2]
>>> b = [1, 2]
>>> c = b
>>> a is b
False
>>> a is c
False
>>> b is c
True
>>> a == b == c
True
于 2012-05-31T11:04:48.543 回答