python - 任何人都可以解释列表中 is 运算符的工作机制吗?
问题描述
l1=[1,2,3]
l2=[1,2,3]
print(l1 is l2)
# False
谁能解释这段代码。为什么是假的?
解决方案
is
运算符检查两个操作数是否引用同一个对象。在这个 l1 和 l2 是两个不同的对象,所以,它返回 False。
请注意,两个列表实例不会仅仅因为它们具有相同的内容而引用同一个对象。
您可以使用id
来检查两者是否都引用同一个对象。检查下面的代码。在这种情况下,您可以看到l1
和l2
是不同的对象,而l2
和l3
指的是同一个对象。请注意==
以下代码中运算符的使用以及列表内容相同时如何返回True
。
l1=[1,2,3]
l2=[1,2,3]
l3 = l2
print("l1 = %s" %(id(l1)))
print("l2 = %s" %(id(l2)))
print("l3 = %s" %(id(l3)))
print(l1 is l2)
print(l2 is l3)
print(l1 == l2)
print(l2 == l3)
输出:
l1 = 139839807952728
l2 = 139839807953808
l3 = 139839807953808
False
True
True
True
注意:如果要根据内容比较两个对象,请使用==
运算符
推荐阅读
- java - Google 视觉响应标签未以原始 JSON 格式返回
- menu - 我可以在这个子菜单的顶部添加一个“编辑过滤器”吗?
- javascript - 制表符 打印点击的行 - 打印 PDF?
- scala - 使用通配符类型参数化的 Scala 案例类成员在调用时不会推断类型绑定
- botium-box - 如何在 botium 中发送有效的正则表达式
- python - Python3:如何“不”舍入到最接近的偶数?
- javascript - JS 均匀地减少一个数组
- javascript - setTimeout 不会产生正确的异步行为
- excel - 有没有办法从公式中提取公式结果以对其进行进一步的数学运算?
- python - 什么是在 Numpy 中将总和从 i = 1 写入 n, log(1 + exp(w_i)) 的有效方法