我在命令行中输入:
a, b = 1, 1
a is b # True
a, b = 1.1, 1.1
a is b # True
但是这样:
a = 1.1
b = 1.1
a is b # False 想不明白
int:
a = 1
b = 1
a is b: # True
这样:
a = 1.1
b = a
a is b: True
当为 a 和 b 单独赋值时,如果值为浮点型 使用 is 比较两个值就是 False int类型不存在此类情况
不明白为什么
求解惑
1.首先关于
is
,如楼上所说的,is
判断两个变量是否指向内存的同一区域,也即变量的 id 是否相同。2.题主需要了解一下
小整数对象池
的概念。因为一般情况下,程序中小整数 [-5, 256] 的使用是比较频繁的,python 为了优化速度,建立了小整数对象池
,也就是说这些小整数在内存中是唯一的。因此:a, b 都是小整数,其对应相同的内存,也就是说变量的id是相同的,所以
a is b
返回True
。而对于浮点数,每建立一个新的变量就开辟一块内存,所以
a = 1.1
和b = 1.1
指向的内存地址是不同的,因此a is b
返回False
。