我创建了两个相同的元组,并且在它们上使用了运算符,应该出现的答案是错误的,但是当我在vscode / atom / notepadd ++中使用它时,它就变成了事实,但是当我在pthon中使用相同的代码运行cmd时,它就变成了错误
a = (1,2,3)
b = (1,2,3)
print(a is b)
实际结果应该为false,当我通过cmd或某些在线python编译器使用python时,它为false,但是当我使用vscode编写上述代码并创建.py文件时,它就会实现。下图显示了我要说的内容: my code in vscode and executed through terminal and directly in terminal
答案 0 :(得分:0)
我在linux终端中检查了结果是否为False。这是因为,当a和b指向同一对象时,a is b
将变为True。 is
不比较元组的值。如果定义b=a
,则将得到True。您可以查看此讨论Python "is" statement: what is happening?
答案 1 :(得分:0)
此更改是Python 3.7.0 alpha 4在bpo-29469: Move constant folding from bytecode layer to AST layer.中引入的
我们看到命令行(REPL)和脚本之间有不同的行为。输入时,在命令行输入的每一行都会被编译并执行。所有脚本都可以立即编译。
通常,对于普通比较,应使用等号运算符(==)而不是标识运算符(is)。对于所有对象,相等运算符具有多种完成比较的策略(实际上,每个类都可以提供自己的__eq__
运算符)。身份运算符将仅比较对象的ID。