代码之家  ›  专栏  ›  技术社区  ›  user8936818

尽管我创建了两个单独的列表,但为什么if条件为true

  •  3
  • user8936818  · 技术社区  · 8 年前
    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条件为true。

    1 回复  |  直到 8 年前
        1
  •  2
  •   mementum    8 年前
    even = [10, 4, 6, 8]
    another_even = list(even)
    

    even 是一个 列表 another_even 是使用中的元素构造的不同列表 即使 .

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

    这就是为什么:

    print(another_even is even)
    

    印刷品 False . 这是因为 即使 另一个\u偶数 相同的对象。

    如果您这样做了:

    another_even = even
    

    你会得到 True

    但现在你要测试 平等 使用:

    if another_even == even:
        another_even.sort( reverse=True )
        print(even)
    else:
        print("Yay")
    

    == 将比较内部的元素 即使 反对 elements 在…内 另一个\u偶数 . 由于列表和元素的长度相等,比较结果为 真的 该代码执行:

        another_even.sort( reverse=True )
        print(even)
    

    你可以想到 == 执行此其他代码时的比较:

    result = True
    for x, y in zip(even, another_even):
        if x != y:
            result = False
            break
    

    将元素一一进行比较,如果一对元素不相等,则结果将为假。在您的情况下,所有元素都是相等的。

    注意:您可以检查对象 即使 另一个\u偶数 这样做是不同的:

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

    输出将不同,因此 错误 从…起 even is another_even

    推荐文章