Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是运算符且==运算符_Python_Python 3.x_Operators - Fatal编程技术网

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的公认答案中解释了。