前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python|python对象三要素与is

Python|python对象三要素与is

作者头像
算法与编程之美
发布2020-06-03 08:58:10
8700
发布2020-06-03 08:58:10
举报
文章被收录于专栏:算法与编程之美

1.引入

在日常生活中,以经验来看:两个看上去相同的东西一定可以用“=”来确定关系,表示它们相等。但是在python中不能说它们完全相等的,这是为什么呢?

这就需要大家了解python对象都有的三个要素,分别是值(value)、id(身份标识)、type(数据类型),我们以感官衡量的相等其实仅仅是值与数据类型的相等,也就是通常代码中的“==”。而每一个值都对应了一个id,要判断两个值的id是否相等,就得引入“is”来判断。

2.is与==

给个简单的例子:

图2.1 is与==区别

可以看出,a和b两个在表面上是相等的,也就是值是相等的,但为什么用is去比较的时候却不同呢?这时便要用到id来进行判断。

图2.2 查看对象id

可以看出,通过id()来获取两个相同列表的id,发现其id是不相同的,所以在is的判断下,这两个对象是不相同的。总的来讲,其实python的对象不仅是像所看到的只有表面一层,像人与人一样,再怎么相似的双胞胎,他们的身份证(ID card)都是不同的,只是看怎么判断而已。

3.拓展

Python为了优化运行空间与速度,界定了一个整数区间[-5,256],只有在这个区间里相同的数,他们的id才会相等,超出这个区间,id就不同,is判断就为false。如:

图2.3 256与257的区别

这就是有趣的256与257的区别。

同样有趣的范围还有一个是20与21的区别,直接看一组实例:

图2.4 20与21的区别

两个明明是正确的,为什么会出现false呢?原因也是python的内部优化,“a”*20会被内部优化为20个a并在一起,而大于20的话为了优化内存,是不会对“a”*21进行优化的,所以is不成立。

4.总结

Python中的优化和对象其实是很“神秘”的,所以下次在编写代码时,发现怎么也理解不了is两头的东西怎么不相等时,想想三要素,想想优化规则,或许就能恍然大悟了。

END

编 辑 | 王楠岚

责 编 | 李和龙

where2go 团队

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档