Python中的is关键词,一段诡异的代码!

麦叔 1年前 ⋅ 419 阅读

运行下面的代码: `

a = 198 b = 198 a is b True a = 257 b = 257 a is b False a = 257;b=257 a is b True ` 为什么这样呢?

  1. 第一段都是198的时候,a is b返回了True。
  2. 第二段都是257的时候,a is b返回了False。
  3. 第三段也都是257,却又返回了True。

首先要明确is关键词的意思是:比较两个变量在内存中的地址是否相同,是真正的同一个东西,而不是两个东西内容相等。 上面的诡异现象是由于Python解释器的优化造成的。

  1. Python把一定常见的数字(-5到256)放在一个统一的地方,如果程序中用到了就会直接使用这个统一的地方的数值。198属于这个范围,所以不管我们定义多少不同的变量,实际上都是用的这同一个,放在内存中是同一个地方。
  2. 而257不属于上面的范围,虽然a和b都是257,但在内存中它们是两个数字。我们is做比较是比较的内存地址,所以是False。如果我们用==做比较,他们比较的是值,就是相同的。
  3. 那第三段怎么又是True了呢?那是因为Python的解释器还有一个优化,如果两个变量在同一个代码块中(在例子中是同一行),那么为了节省空间,相同的变量也会公用同一个内存空间。所以就又是True了。

全部评论: 0

    我有话说: