Python 中的 is 到底是怎么判断的? 求大牛解答

怎么办
  • 125

我在命令行中输入:

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.2k
3 个回答

1.首先关于 is ,如楼上所说的,is 判断两个变量是否指向内存的同一区域,也即变量的 id 是否相同。

2.题主需要了解一下 小整数对象池 的概念。因为一般情况下,程序中小整数 [-5, 256] 的使用是比较频繁的,python 为了优化速度,建立了 小整数对象池,也就是说这些小整数在内存中是唯一的。因此:

a = 1
b = 1
a is b  # True

a, b 都是小整数,其对应相同的内存,也就是说变量的id是相同的,所以 a is b 返回 True
而对于浮点数,每建立一个新的变量就开辟一块内存,所以 a = 1.1b = 1.1 指向的内存地址是不同的,因此 a is b 返回 False

is判断是否指向同一个内存区域,==判断是否值相同

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏