'是'和'=='之间的区别

时间:2012-05-31 11:02:34

标签: python

  

可能重复:
  Is there any difference between “foo is None” and “foo == None”?

真的很简单。

区别:

if a.b is 'something':

if a.b == 'something':

请原谅我的无知

2 个答案:

答案 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可以是TrueFalse(与第一个示例相比),但==的工作方式符合我们的期望:

'3' is '3'
True

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

'3' == '3'
True

这里不足为奇,我们期待的是什么。

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

答案 1 :(得分:3)

如果a is ba 是同一个对象,则

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