Python中 is 和 ==的区别

在 Python 中会用到对象之间比较,可以用 ==,也可以用 is 。区别如下:

is 比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同。

== 比较的是两个对象的内容是否相等,即内存地址可以不一样,内容一样就可以了。默认会调用对象的 __eq__()方法。

简单的可以理解为:

is 比较对象的内存地址 ,==比较对象的值是否相等

但是万万没想到,这里面有个坑。

在比较整数对象时,Python会对比较小的整数对象进行缓存,下次用的时候直接从缓存中获取。所以is 和 ==的结果相同

Python会对比较小的整数对象进行缓存,下次用的时候直接从缓存中获取,所以is 和 == 的结果可能相同:

>>> a = 1
>>> b = 1
>>> a is b
True
>>> a == b
True

而看一下另外一段代码:

>>> a = 257
>>> b = 257
>>> a is b
False

这是什么原因呢?

注意,Python仅仅对比较小的整数对象进行缓存(范围为范围[-5, 256])缓存起来,而并非是所有整数对象。需要注意的是,这仅仅是在命令行中执行,而在Pycharm或者保存为文件执行,结果是不一样的,这是因为解释器做了一部分优化。

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部