09-从内存看python中的is与==的区别
先上一个例子!
list1=[1,2,3]
list2=[1,2,3]
list3=list1
if list1 is list2:
print("True")
else:
print("False")
if list1 == list2:
print("True")
else:
print("False")
===>False
===>True
每一个常量,列表,元组等数据结构都有一个地址
(在python3中整数1-256,被系统认为是常用数值,因此在系统内部已经固定好一块内存地址来存放这些值(内存地址:1786160224至1786168384(每个数相隔32)))
先上图,再讲解:
上面说了每一个常量,列表,元组等数据结构都有一个自己的内存地址.因此1,2,3及两个列表都有一个属于自己的地址.我们把变量名当作便利贴.当你需要用这块内存,只需要对变量名的引用,机器就知道是对这部分内存进行操作.
看程序,列表存放的就是1,2,3常量值.其实不然,从内存看,它存放的是1,2,3常量对应的地址.如上图所示.
is 比的是 内存地址. == 比的是值.
这就可以理清上面例子的问题了.
希望有助于大家