以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的地址。
扫描二维码关注公众号,回复:
1858859 查看本文章
2. 字符串
字符串可以称之为字符串常量,前面已经说过,常量储存在数据区中。而数据区的数据的地址都是固定的,当不同的变量从数据区获取相同的变量值时,他们的地址是相同的。
布尔值和字符串一样储存在数据区中,这里不做解释。
3.元组
元组储存时,变量名储存在栈里,而对应的值储存在堆里面,
虽然set1和set2对应的值相同但对应的id不同,所以set2 is set1返回的结果是False
至于其他的数据类型,其值都是储存在堆里面,而在栈里的变量名存储的是变量的地址,它们和元组一样,对于 is 和 == 具有相同的结果。