Python中 == 和 is 的区别

Python中提供关键字 is ,同时,==也是判断运算符,那么他们的区别是什么?

Python中is的含义:

      is 操作符是Python语言的一个内建的操作符。它的作用在于比较两个变量是否指向了同一个对象。

Python中==的含义:

      ==运算符是Python语言的一个内建的运算符。它的作用在于比较两个变量所指代的含义是否相同。

      即,is所比较的是对象,而==比较的是对象所指代的值。

看下实际类型的比较结果。

一、list:

a = [1, 2, 3]

b = [1, 2, 3]

print(a, b)

print(a == b)

print(id(a), id(b))

print(a is b)

输出结果非常符合预期,==在比较指代的值,值是相同的。is在比较原生对象,对象是不同的。

二、dict

i = {'first': 100, 'second': 200}

j = {'first': 100, 'second': 200}

print(i, j)

print(i == j)

print(id(i), id(j))

print(i is j)

结果和list的比较结果相同。==在比较指代的值,值是相同的。is在比较原生对象,对象是不同的。

三、数字类型

m = 1

n = 1

print(m, n)

print(m == n)

print(id(m), id(n))

print(m is n)

数字类型的比较结果和预想有些出入,声明了两个对象,m和n。数值理应是相同的,但是为什么is比较也是相同的呢?

这里是因为Python对部分数字和字符串做了优化处理,即使你声明了很多对象,但是实际他们都只有一个对象。即Python的大整数池和小整数池。

四、字符串

x = 'test'

y = 'test'

print(x, y)

print(x == y)

print(id(x), id(y))

print(x is y)

同上,这里的is比较也是相同的。Python并不像C++一样,开辟栈上空间,赋值写入字符串。所以他们的对象实际都是同一份。

在Python中,数值型和字符串型的情况下,==和is的比较都是True,当类型为tuple,list,dict或set型时,==和is的比较都是False。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容