为什么不[[]] == list(list())

时间:2019-11-21 20:28:38

标签: python list

我只是在Python中随机观察了以下内容,并且很好奇知道为什么它的值为False:

list(list()) == [[]]

有趣的是,如果您通过以下方式重新排列语法,第一种方式的评估结果为False,第二种方式的评估结果为True:

list([]) == [[]] [list()] == [[]]

这里的内幕是什么?

4 个答案:

答案 0 :(得分:11)

documentation on the list constructor

  

列表([[可迭代])

     
    

返回一个列表,该列表的项目与可迭代的项目相同,并且顺序相同。 iterable 可以是序列,支持迭代的容器或迭代器对象。如果 iterable 已经是列表,则复制并返回一个副本,类似于iterable[:]。例如,list('abc')返回['a', 'b', 'c'],而list( (1, 2, 3) )返回[1, 2, 3]。如果未提供任何参数,则返回一个新的空列表[]

  

当您将list传递给list()时,它返回一个副本,而不是嵌套列表,而[[]]创建一个空的嵌套列表。

答案 1 :(得分:7)

list不会构造包含其参数的列表。它构造一个列表,其元素包含在其参数中。 list([])不返回[[]];它返回[]。因此,list(list()) == list([]) == []

答案 2 :(得分:6)

list(...)的构造函数与列表文字[...]的作用不同。 constructor接受任何 iterable 并列出其项目

>>> list((1, 2, 3))
[1, 2, 3]
>>> list("foo")
['f', 'o', 'o']
>>> list(list())

列表字面量定义的列表完全包含枚举项

>>> [(1, 2, 3)]
[(1, 2, 3)]
>>> ["foo"]
['foo']
>>> [[]]
[[]]

请注意,list()在不带任何参数的情况下产生的结果与[]相同。

答案 3 :(得分:3)

当您执行list(list())时,您将创建一个列表并将其即时转换为列表。因此,您最终得到一个空列表,而不是一个嵌套列表。