Python:'是'和'=='之间有什么区别?

时间:2014-01-31 11:01:40

标签: python

我正在尝试下一个代码:

x = 'asd'
y = 'asd'
z = input() #write here string 'asd'. For Python 2.x use raw_input()
x == y # True.
x is y # True.
x == z # True.
x is z # False.

为什么我们在最后一个表达式中有错误?

2 个答案:

答案 0 :(得分:13)

is检查身份a is bTrue iff ab是同一个对象(它们都存储在同一个内存地址中)。

==检查相等,这通常由魔术方法__eq__定义 - 即如果a == b Truea.__eq__(b)是} True

在具体情况下,Python将两个硬编码字符串优化到同一个对象中(因为字符串是不可变的,因此没有危险)。由于input()将在运行时创建一个字符串,因此无法进行优化,因此会创建一个新的字符串对象。

答案 1 :(得分:2)

is检查对象是否相等,但是对象实际上是同一个对象。由于input()始终会创建一个新字符串,因此它永远不会is另一个字符串。

Python为同一个字符串文字的所有匹配项创建一个对象,这就是xy指向同一个对象的原因。