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')(代码片段