Python 是运算符且==运算符
Python 是运算符且==运算符,python,python-3.x,operators,Python,Python 3.x,Operators,num1和num2都是3.5,并且num1==num2给出True,但是对于是运算符,它是False 请看下面的代码 输入: num1 = 3.5 num2 = float(input('num2:')) # num2 stands for 2nd number print(num1 == num2) print(num1 is num2) 输出: num2:3.5 True False num1和num2都是3.5,并且num1==num2给出True,但是 对于is运算符,它是Fals
num1
和num2
都是3.5,并且num1==num2
给出True
,但是对于是运算符,它是False
请看下面的代码
输入:
num1 = 3.5
num2 = float(input('num2:')) # num2 stands for 2nd number
print(num1 == num2)
print(num1 is num2)
输出:
num2:3.5
True
False
num1
和num2
都是3.5,并且num1==num2
给出True
,但是
对于is
运算符,它是False
为什么id(num1)!=id(num2)
?简单地说,is
将检查身份,而=
将检查是否相等。is
操作符比较两个对象的标识,而=
操作符比较两个对象的值 运算符比较两个操作数的值并检查值是否相等。而is
运算符检查两个操作数是否引用同一对象。与其他两个操作数一样,==检查相等,is检查id()。玩转id()来看看对象id是什么,它们不一样,这就是为什么“is”返回为false。如果两者都是3.5,为什么num1和num2引用不同的地址?@Kaushik,我认为您使用float的事实可能是原因。我尝试了使用整数的相同代码。两个变量返回相同的id。是的,即使我尝试了,结果都为真。但是当我们使用float时,为什么它是假的呢?@Kaushik CPython实现在一些不可变的对象上使用内部缓存(特别是小整数——对于自1.5.x天以来已经发生了很大变化的“小”的定义——以及匹配python标识符语法的文本字符串)。这是一个实现细节。Python语言定义中没有规定这种缓存应该或不应该发生,它只说明is
比较对象的id(不是它们的“内存位置”-CPython使用内存地址作为id也是一个实现细节).如果num1和num2都是3.5,为什么它们指的是不同的地址?关闭得太快了-这不是一个完全重复的地址,尽管它是密切相关的。我写了一个关于python中整数和浮点如何不同的答案,写了一半,这就是为什么我们用浮点值而不是整数来获得这种行为。@Baldrickk它仍然是一个副本-在CPython中它不总是对整数起作用的原因在dup的公认答案中解释了。