在python中万物即对象,所以is比较的是id值相同不相同,而==仅比较值。
对于值大小在-5~256之间的变量,python因为有内存池缓存机制,会对该值分配内存,而不是变量,所以只要是该值的变量都指向同一个内存,即id相同。例如:
>>> a = 257
>>> b = 257
>>> a is b
False
>>> c = 5
>>> d = 5
>>> c is d
True
>>> id(a)
2047860189776
>>> id(b)
2047860189936
>>> id(c)
1884139872
>>> id(d)
1884139872
但是,==仅比较值大小,例如:
>>> a = 257
>>> b = 257
>>> a == b
True
以上为交互模式的结果,脚本模式下is和==结果一样!
其区别在于:交互模式下,每一行代码作为一个独立的代码块,超出缓存机制部分,会新建对象。脚本模式下,脚本文件整个作为一个代码块,在新建常量的过程,会优先检查常量字典,所以在脚本模式下,结果一样。
更为详细的验证请参考:
https://www.zhihu.com/question/53536750