is和==运算符

Posted 行走的cd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了is和==运算符相关的知识,希望对你有一定的参考价值。

is:同一性运算符

看如下例子:

a=b=[1,2,3]
c=[1,2,3]
print(a==b)
print(a==c)
print(a is b)
print(a is c)
#输出
True
True
True
False

可见,is运算符用于判定同一性,而不是相等性,变量a和b被绑定在同一个列表上,而变量c被绑定在另一个具有相同数值和顺序的列表上,它们的值可能相等,但不是同一个对象,从内存的角度思考,就是它们所指向的内存空间不一样,a和b指向同一块内存空间,而c指向另一块内存空间。由此可见,is 运算符用来判定两个对象是否为同一对象,==判断两个对象是否相等。

再看这个例子:

 

>>> a=b=5
>>> c=5
>>> a is b
True
>>> a is c
True

>>> x=y=500
>>> z=500
>>> x is y
True
>>> x is z
False

 

明明a和c不再同一块内存中,为什么a is b返回的是True呢,这是Python的垃圾回收机制造成的,python内部有一个叫小整数对象池的东西,为了优化速度,Python会把[-5,256]之间的小整数提前存放在小整数对象池中,当程序中要用到这个区间中的数时,都会指向这个对象池中的同一块数据,不会再重新申请一块内存。当超出这个区间的数时,就会重新申请一块内存,所以当当为500时,x is y返回False。

注意:这个现象只有在命令行中输入时有效,当在pycharm中运行或者保存成文件执行时都时返回True,具体原因待查。

以上是关于is和==运算符的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 报错 DioError [DioErrorType.DEFAULT]: Bad state: Insecure HTTP is not allowed by platform(代码片段

Error: Python executable “H:devpython3.10python.EXE“ is v3.10.0, which is not supported by gyp.(代码片段

Kotlin学习之旅解决错误:kotlin.NotImplementedError: An operation is not implemented: Not yet implemented(代码片段

ElasticSearch学习问题记录——Invalid shift value in prefixCoded bytes (is encoded value really an INT?)(代码片段

[未解决问题记录]python asyncio+aiohttp出现Exception ignored:RuntimeError('Event loop is closed')(代码片段

10个JavaScript代码片段,使你更加容易前端开发。