Python 中 is 跟 == 的区别,还有其中的坑。

xiaoxiao2021-02-28  37

今天做个小测试,遇到一个这样子的问题:1.a=1,b=1;a==b,a is b 布尔运算为什么?2.a=100,b=100;a==b,a is b布尔运算结果为什么?3.a=300,b=300;a==b,a is b布尔运算结果为什么? 结果真的让人大吃一惊:

>>> a = 1 >>> b = 1 >>> a is b True >>> a == b True >>> a = 100 >>> b = 100 >>> a is b True >>> a == b True >>> a = 300 >>> b = 300 >>> a is b False >>> a == b True

为了探寻真正的问题,接着玩了下面的代码:

>>> a = 1 >>> a is 1 True >>> a = 300 >>> a is 300 False

这就奇了怪了,a被赋值300,跟300 is 布尔,居然是False。继续追寻原因,Python中,变量只是"标签",用来引用常量。常量是由地址“ID”和内容“VALUE”组成,内容那么相同常量的地址“ID”就应该一样嘛,继续玩代码:

>>> a = 1 >>> id(a) 505986472 >>> id(1) 505986472 >>> a = 300 >>> id(a) 19209728 >>> id(300) 20092144

嗯? 当常量是300的时候,id值不一样了,查资料吧。原来在《Pyhton源代码剖析》这本书,有small_int的容器这个概念,small_int的范围-5到256。

上面提到了常量的组成方式,那么就很容易得出is和==的区别:1.==只关注常量里面的内容。2.is既要关注内容,也要关注地址

转载请注明原文地址: https://www.6miu.com/read-2620764.html

最新回复(0)