我正在尝试下一个代码:
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.
为什么我们在最后一个表达式中有错误?
答案 0 :(得分:13)
is
检查身份。 a is b
为True
iff a
和b
是同一个对象(它们都存储在同一个内存地址中)。
==
检查相等,这通常由魔术方法__eq__
定义 - 即如果a == b
True
为a.__eq__(b)
是} True
。
在具体情况下,Python将两个硬编码字符串优化到同一个对象中(因为字符串是不可变的,因此没有危险)。由于input()
将在运行时创建一个字符串,因此无法进行优化,因此会创建一个新的字符串对象。
答案 1 :(得分:2)
is
检查对象是否相等,但是对象实际上是同一个对象。由于input()
始终会创建一个新字符串,因此它永远不会is
另一个字符串。
Python为同一个字符串文字的所有匹配项创建一个对象,这就是x
和y
指向同一个对象的原因。