You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已创建两个独立列表,为何if条件中another_even == even判断为真?

为什么两个独立列表用==判断会返回True?

先看你给出的代码和运行结果:

代码:

even = [10, 4, 6, 8]
another_even = list(even)
print(another_even is even)
if another_even == even:
    another_even.sort( reverse=True )
    print(even)
else:
    print("Yay")

运行输出:

False
[10, 4, 6, 8]

你的疑问:明明已创建两个独立列表,为何if条件中的another_even == even判断结果为真?


嘿,这个问题其实是把Python里的身份判断和值判断搞混啦!我给你掰扯清楚:

  1. is vs ==的核心区别

    • is是用来检查两个变量是否指向同一个内存对象(说白了就是看它们是不是“同一个东西”)。你用list(even)创建another_even,确实生成了一个全新的列表对象,所以another_even is even返回False——这部分你完全没说错,它们是两个独立的家伙。
    • ==则是检查两个对象的值是否完全相等。对于列表这种容器类型来说,Python会逐个对比两个列表里的元素:只要元素的顺序、值全都对应一致,==就会返回True。你的两个列表初始元素都是[10,4,6,8],自然满足这个条件。
  2. 再说说代码里的后续逻辑
    因为another_even == even为真,所以进入了if分支,对another_even执行了反向排序。但sort()是原地修改列表的方法——它只会改变调用它的那个列表(也就是another_even),完全不会影响原列表even,所以最后打印even还是原来的内容。

给你补个小例子加深理解:

a = [1,2,3]
b = list(a)  # 创建新列表
print(a is b)  # 输出False,不是同一个对象
print(a == b)  # 输出True,值完全相同

内容的提问来源于stack exchange,提问作者user8936818

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:41:17