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条件为真。
答案 0 :(得分:3)
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
但现在你用<:p>测试 equality
if another_even == even:
another_even.sort( reverse=True )
print(even)
else:
print("Yay")
==
会将even
内的元素与elements
内的another_even
进行比较。由于列表和元素的长度相等,因此比较计算为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