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

Iva*_*kyy 4 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.
Run Code Online (Sandbox Code Playgroud)

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

Ami*_*hum 13

is检查身份.a is bTrueiff a并且b是相同的对象(它们都存储在相同的内存地址中).

==支票平等,这通常是由魔术方法定义__eq__-即a == bTrue如果a.__eq__(b)True.

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