我Python你个身份运算符is和is not,还有你==

一、就你没有对象

先编个故事:从前计算机内存中有一个对象[1,2,3],许配给变量a;还有一个对象[1,2,3],许配给变量b。通过赋值给变量来保存在内存中,直到变量被删除;如果不赋值给变量,执行后就会被销毁(python垃圾回收机制)。

内存中每个对象都有一个唯一的id,可以通过python内置函数id(),查看对象的id。如果id相同,则是同一个对象;如果id不同,则不是同一个对象。

二、Python身份运算符is和is not

我Python你个身份运算符is和is not,还有你==_第1张图片

三、is 和 == 的区别:

is 用于判断两个变量引用对象是否为同一个。
== 用于判断引用变量的值是否相等。

1、可变数据
1)列表类型

In [28]: a=[1,2,3]
In [29]: b=[1,2,3]

In [30]: id(a)
Out[30]: 2237696798336
In [31]: id(b)
Out[31]: 2237696871488

In [32]: a==b
Out[32]: True
In [33]: a is b  #id不同
Out[33]: False

2)字典类型

In [34]: a={
     1,2,3}
In [35]: b={
     1,2,3}

In [36]: id(a)
Out[36]: 2237679963040
In [37]: id(b)
Out[37]: 2237679963712

In [38]: a==b
Out[38]: True
In [39]: a is b
Out[39]: False

2、不可变数据
3)元组类型

a=(1,2,3)
b=(1,2,3)

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

print(a==b)
print(a is b)

执行结果:
2321601238592
2321601238592
True
True

4)字符串类型

In [12]: a='hello'
In [13]: b='hello'

In [14]: id(a)
Out[14]: 2382661232944
In [15]: id(b)
Out[15]: 2382661232944

In [16]: a==b
Out[16]: True
In [17]: a is b
Out[17]: True

5)数字类型

In [18]: a=123
In [19]: b=123

In [20]: id(a)
Out[20]: 140704955753952
In [21]: id(b)
Out[21]: 140704955753952

In [22]: a==b
Out[22]: True
In [23]: a is b
Out[23]: True

四、总结

针对两个变量a、b:
如果是可变数据如列表、字典:值相等(a == b),仍是不同的对象(a is not b)。
如果是不可变数据如数字、元组、字符串:值相等(a == b),则是相同的对象(a is b)。

你可能感兴趣的:(python)