谁能解释下 python3.7 的这点小差别

谁能解释下 python3.7 的这点小差别

对于上图的运行结果,可能大家会和我一样有点小惊讶

  1. 对于list不会出现差异
  2. 分行赋值也不会出现 a is b == True 的结果

谁能解释下 python3.7 的这点小差别

我的理解是解释器做了一点优化,对作为不可变类型的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

回到顶部