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
)。