谁能解释下 python3.7 的这点小差别
对于上图的运行结果,可能大家会和我一样有点小惊讶
- 对于list不会出现差异
- 分行赋值也不会出现
a is b == True
的结果
我的理解是解释器做了一点优化,对作为不可变类型的tuple在一行代码内不会重复创建。
但这么做真的好吗,虽然从实用角度,并没有引出什么坑,但还是有损一个语言的逻辑自洽的。作为强迫证不认可,虽然python其实已经不少这类小缺口了。
回答:
用控制台执行这个代码反而增加了你的疑问,(1,2)不是解析时创建的,是位于常量池的一个常量 所以同一个codeobject中 (1,2) is (1,2) 。a = (1,2) / b = (1,2) 在控制台中时不同的两个codeobject 所以 a is not b ,如果在py文件中直接执行 a is b
回答:
好奇是什么原因让你发现这个的。
我觉得没什么不妥,本来 is
就只是判断是否为同一对象,若要判断值相等,应该用 ==
。
回答:
依照官方文档:
The operators is and is not test for object identity: x is y is true if and only if x and y are the same object. x is not y yields the inverse truth value.
https://docs.python.org/3/ref...
is
用来判断前后是不是同一个对象。
你可以使用 id()
方法来看看前后两个操作数的对象ID,
https://docs.python.org/3/lib...
回答:
回答完发现自己没看题哈哈,就当个吃瓜群众吧
回答:
"Fluent Python" 有一个小章节 "Tricks Python Plays with Immutables" 写过这类问题。
作者说,这些解释器的优化,并没有文档明示,不同版本也可能有不同的做法。只要你的代码不依赖这些优化特性,其实不会影响我们对python的使用。所以权当了解,不必纠结了。
以上是 谁能解释下 python3.7 的这点小差别 的全部内容, 来源链接: utcz.com/a/164599.html