为什么’list is list(list)’在python中为false?

Why 'list is list(list)' is false in python?

本问题已经有最佳答案,请猛点这里访问。
1
2
num = [1,2,3,4]
num == list(num)

它给出了真的,在那里,

1
num is list(num)

给出错误的答案。

这两者有什么区别?python在这两个语句中都做了什么?


==调用list.__eq__来比较两个列表的内容。is比较对象引用。返回Trueis表示两个名称都指向内存中的同一对象。

结果告诉您,即使输入是另一个列表,list也总是生成一个浅拷贝。原因是list是一种可变类型。您希望能够在不修改另一个列表的情况下修改一个列表,否则为什么还要调用构造函数呢?

同样的行为不会发生在tuple上,这是不变的。tuple(some_tuple) is some_tupleTrue


list()创建了一个新列表。新创建的列表与原始列表(==相同,但不相同(is)。