为什么'list is list(list)'在 python 中是假的?


num = [1,2,3,4]
num == list(num) 

它给出True,其中

num is list(num)

给出

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

==调用两个列表的list.__eq__,这两个列表比较内容。is比较对象引用。is返回True意味着两个名称都指向内存中的同一对象。

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

同样的行为不会发生在tuple上,这是不可变的。tuple(some_tuple) is some_tuple将被True.

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

最新更新