即使我创建了两个单独的列表,为啥 if 条件为真
Posted
技术标签:
【中文标题】即使我创建了两个单独的列表,为啥 if 条件为真【英文标题】:Even though I have created two seperate lists, why is the if condition true即使我创建了两个单独的列表,为什么 if 条件为真 【发布时间】:2018-06-29 15:29:54 【问题描述】: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")
输出: 假的
[10, 4, 6, 8]
即使我创建了两个单独的列表,为什么 if 条件为真。
【问题讨论】:
Is there a difference between `==` and `is` in Python?的可能重复 if 条件为 True 因为两个对象相等但不是同一个对象。它们是两个不同的容器,里面的数字相同。 list(data) 从 data 中的数据创建一个新列表。数据可以是任何可迭代的。在这种情况下,数据也是一个列表的巧合。 【参考方案1】:even = [10, 4, 6, 8]
another_even = list(even)
even
是一个列表
another_even
是您使用 even
中的元素构建的不同列表。
注意:不同。它们是两个不同的对象。
这就是为什么:
print(another_even is even)
打印False
。这是因为even
和another_even
不是同一个对象。
如果你这样做了:
another_even = even
你会得到True
但现在你测试平等:
if another_even == even:
another_even.sort( reverse=True )
print(even)
else:
print("Yay")
而==
会将even
中的元素与another_even
中的elements
进行比较。因为列表和元素的长度相等,所以比较结果为 True
,然后执行以下代码:
another_even.sort( reverse=True )
print(even)
您可以将==
比较视为执行其他代码:
result = True
for x, y in zip(even, another_even):
if x != y:
result = False
break
元素是一对一比较的,如果一对不相等,结果将为 False。在您的情况下,所有元素都是平等的。
注意:您可以这样做检查对象even
和another_even
是否不同:
print(id(even))
print(id(another_even))
而且输出会有所不同,因此False
来自even is another_even
【讨论】:
以上是关于即使我创建了两个单独的列表,为啥 if 条件为真的主要内容,如果未能解决你的问题,请参考以下文章
即使路径不存在,为啥 Path(...).exists 为真? [复制]