带有“ is”关键字的意外输出

时间:2019-02-02 17:19:05

标签: python

我无法确定以下程序的输出

big_num_1   = 1000
big_num_2   = 1000
small_num_1 = 1
small_num_2 = 1
big_num_1 is big_num_2 # False
small_num_1 is small_num_2 # True

上面发生了什么? 为什么一个为假而另一个为真。

来源:https://luminousmen.com/post/python-interview-questions-senior

1 个答案:

答案 0 :(得分:1)

因为is比较两个对象的 identity (也就是说,如果它们是完全相同的对象。)您想测试平等,为此,您必须使用==运算符:

big_num_1 == big_num_2
=> True

small_num_1 == small_num_2
=> True

如果您想知道此示例为何起作用:

small_num_1 is small_num_2
=> True

这是因为Python caches内部较小(在-5到256之间)int对象,因此比较中使用的对象是从缓存中获取的并且是相同的。 big_num_1big_num_2大于256,因此它们由两个不同的对象表示,并且身份测试失败。