首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

“is”和“=” 不得不说的故事

前言

相比写过 Python 的小伙伴对 "is" 和 "==" 这两个运算符肯定不会陌生,但是你真的能清楚两者的区别吗? 别着急,听我慢慢道来.

is 和 ==

"is" 和 "==" 都是用来比较两个对象的,区别在于 "is" 是用来判断,两个对象是否为相同,即它们实际的内存地址是否相等,也就是说id()值是否一样, 而 "==" 就很简单了,它只是比较两个对象的值是不是相同.

是不是很简单,让我们结合之前的知识点进行简单的测试.

例子

1.

第一组输出分别是什么呢?让我们揭晓答案:

这个例子如果错了,需要看一下我之前写的关于字符串池化的那篇文章了,这里字符串 "leetao" 被池化了,所以 a,b 两者实际指向同一块内存.

2.

第二组的正确答案:

这个例子也不能理解,之前关于字符串池化的时候,也提过类似的例子,a,b 在同一行赋值, python 解释器进行了优化,将两者指向同一个对象,所以导致 a 和 b 值相等, id 也相等, 至于 a 和 c 很好理解,它们值相等,但是很明显,id值不一样.

3

第三组就更有意思了,答案:

这个例子,牵扯到另外一个知识点,关于 Number 类型的一个小的知识点,让我们看一下官方原文:

The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you actually just get back a reference to the existing object. So it should be possible to change the value of 1. I suspect the behaviour of Python in this case is undefined. :-)

翻译过来的意思大致就是: 当前实现为-5到256之间的所有整数保留一个整数对象数组,当您在该范围内创建一个int时,实际上只返回对现有对象的引用。 因此应该可以更改值1.我怀疑在这种情况下Python的行为是未定义的。:-)

有了这个知识作为前提,就不难理解,上面的例子的答案了.

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190104G17D6G00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券