我在命令行中输入:a, b = 1, 1
a is b # Truea, 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 回答
慕妹3146593
TA贡献1820条经验 获得超9个赞
1.首先关于 is
,如楼上所说的,is
判断两个变量是否指向内存的同一区域,也即变量的 id 是否相同。
2.题主需要了解一下 小整数对象池
的概念。因为一般情况下,程序中小整数 [-5, 256] 的使用是比较频繁的,python 为了优化速度,建立了 小整数对象池
,也就是说这些小整数在内存中是唯一的。因此:
a = 1b = 1a is b # True
a, b 都是小整数,其对应相同的内存,也就是说变量的id是相同的,所以 a is b
返回 True
。
而对于浮点数,每建立一个新的变量就开辟一块内存,所以 a = 1.1
和 b = 1.1
指向的内存地址是不同的,因此 a is b
返回 False
。
添加回答
举报
0/150
提交
取消