is和==

以cmd打开Python简单讲述is和==的区别

python常见的数据类型有:整型、浮点型、bool值、元组、字符串、列表、字典、set集合、类等

在介绍is和==的区别之前先讲述一下内存的空间分配

内存分为四块:分别是堆、栈、数据区(用于存放常量的数据)、函数区(用来存放函数)

1. 整型

对整形来说在-5到256之间数据是存放在数据区的,其他的整形数据不在数据区中。在定义整型变量时,若整数在-5到256之间,那么从数据区直接读取数据,若不在范围内,则在堆内新开辟一个空间来储存,变量名在栈里对应储存数据对应的堆地址。数据区存放的都是常量

下面来看在-5到256之间时 a==b和 a is b返回的结果都是True


当不在-5到256范围内时,a==b返回的结果是True;而m  is  n返回的结果是False


这是因为==比较的是变量的类型和值,而is比较的除了变量的类型和值之外还比较变量的地址。下面我们查看一下a、b和m、n的地址。



2. 字符串

字符串可以称之为字符串常量,前面已经说过,常量储存在数据区中。而数据区的数据的地址都是固定的,当不同的变量从数据区获取相同的变量值时,他们的地址是相同的。


布尔值和字符串一样储存在数据区中,这里不做解释。

3.元组

元组储存时,变量名储存在栈里,而对应的值储存在堆里面,


虽然set1和set2对应的值相同但对应的id不同,所以set2  is  set1返回的结果是False


至于其他的数据类型,其值都是储存在堆里面,而在栈里的变量名存储的是变量的地址,它们和元组一样,对于 is 和 == 具有相同的结果。

猜你喜欢

转载自blog.csdn.net/qwerlol123456/article/details/80903061