Python|python对象三要素与is

简介: Python|python对象三要素与is

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两头的东西怎么不相等时,想想三要素,想想优化规则,或许就能恍然大悟了。


目录
相关文章
|
17天前
|
Python
Python的文件对象read()
【6月更文挑战第8天】
23 8
|
16天前
|
Python
python中类对象
【6月更文挑战第9天】
19 4
|
16天前
|
Python
python中模块对象
【6月更文挑战第9天】
19 4
|
17天前
|
Python
Python的文件对象readline()
【6月更文挑战第8天】
15 5
|
17天前
|
移动开发 Python
Python的文件对象open()
【6月更文挑战第8天】
19 5
|
18天前
|
存储 数据安全/隐私保护 计算机视觉
python文件对象读写二进制文件
【6月更文挑战第7天】
37 6
|
16天前
|
Python
python 中*类型对象
【6月更文挑战第9天】
20 2
|
10天前
|
存储 Go 索引
牢记python对象的操作方式
【6月更文挑战第20天】在Python中,`hash()`和`is`帮助确定对象的相等性。`dir()`和`vars()`揭示对象的属性和内部表示,`__slots__`优化内存使用。列表和字典结构有不同的内存和性能特性,字典使用哈希表进行快速访问。
52 5
牢记python对象的操作方式
|
4天前
|
Python
Python面向对象进阶:深入解析面向对象三要素——封装、继承与多态
Python面向对象进阶:深入解析面向对象三要素——封装、继承与多态
|
12天前
|
Shell Python
python中模块对象__file__
【6月更文挑战第12天】
19 8