即使我创建了两个单独的列表,为什么if条件为真

时间:2018-01-20 14:21:03

标签: python list if-statement boolean

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条件为真。

1 个答案:

答案 0 :(得分:3)

even = [10, 4, 6, 8]
another_even = list(even)

even是一个列表 another_even是使用even中的元素构建的不同列表。

注意:不同。它们是两个不同的对象。

这就是原因:

print(another_even is even)

打印False。这是因为evenanother_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。在你的情况下,所有元素都是相同的。

注意:您可以检查对象evenanother_even是否有所不同:

print(id(even))
print(id(another_even))

输出会有所不同,因此来自False

even is another_even