0

python_tuple.png

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

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

python_tuple2.png

我的理解是解释器做了一点优化,对作为不可变类型的tuple在一行代码内不会重复创建。

但这么做真的好吗,虽然从实用角度,并没有引出什么坑,但还是有损一个语言的逻辑自洽的。作为强迫证不认可,虽然python其实已经不少这类小缺口了。

11月13日提问

查看全部 5 个回答

0

"Fluent Python" 有一个小章节 "Tricks Python Plays with Immutables" 写过这类问题。

作者说,这些解释器的优化,并没有文档明示,不同版本也可能有不同的做法。只要你的代码不依赖这些优化特性,其实不会影响我们对python的使用。所以权当了解,不必纠结了。

推荐答案

0

已采纳

用控制台执行这个代码反而增加了你的疑问,(1,2)不是解析时创建的,是位于常量池的一个常量 所以同一个codeobject中 (1,2) is (1,2) 。a = (1,2) / b = (1,2) 在控制台中时不同的两个codeobject 所以 a is not b ,如果在py文件中直接执行 a is b

推广链接