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 条件为真。
最佳答案
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))
并且输出会不同,因此 even 的
False
是 another_even
关于python - 即使我创建了两个单独的列表,为什么 if 条件为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48357213/