Crossin的编程教室

标题: 请问一下各位大佬们为什么用file赋值两个相同的大于256的数,它们的id却是一样的。 [打印本页]

作者: 929231963    时间: 2020-1-15 22:02
标题: 请问一下各位大佬们为什么用file赋值两个相同的大于256的数,它们的id却是一样的。
a=257
b=257
a is b
true
作者: crossin先生    时间: 2020-1-16 16:41
不明白你说的用 file 赋值啥意思
你这个代码我这里运行结果是
  1. In [1]: a = 257

  2. In [2]: b = 257

  3. In [3]: a is b
  4. Out[3]: False
复制代码
但你如果通过另一个变量赋值就不一样了:
  1. In [4]: c = 257

  2. In [5]: a = c

  3. In [6]: b = c

  4. In [7]: a is b
  5. Out[7]: True
复制代码

作者: crossin先生    时间: 2020-1-16 16:43
另外,这个其实不算是语法的一部分,即使是正常256以下id相等,你也不该依赖这个作为代码逻辑的一部分。因为很可能因为系统或版本的改变,这个优化的表现就不一样了。
它只是一种编译器执行层面的优化
作者: 929231963    时间: 2020-1-16 19:58
crossin先生 发表于 2020-1-16 16:43
另外,这个其实不算是语法的一部分,即使是正常256以下id相等,你也不该依赖这个作为代码逻辑的一部分。因 ...

嗯嗯,谢谢先生。我用file赋值的意思是,我先把这个代码写在一个file里,然后再run module,结果输出的是true,但是如果在idle里,一步一步地输入的话,输出的结果是false。 这是我的操作截图,第一个结果是运行file里的内容得出的结果。

作者: crossin先生    时间: 2020-1-17 17:32
929231963 发表于 2020-1-16 19:58
嗯嗯,谢谢先生。我用file赋值的意思是,我先把这个代码写在一个file里,然后再run module,结果输出的是 ...

应该是编译器有优化,把两个相同的int用了同一个对象
作者: 929231963    时间: 2020-1-17 21:35
crossin先生 发表于 2020-1-17 17:32
应该是编译器有优化,把两个相同的int用了同一个对象

原来如此,谢谢先生!




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5