list()和[]有什么区别?

33

以下代码有什么不同:

foo = list()

而且

foo = []

Python建议有一种做事方式,但有时似乎还有更多的方法。


1
其他问题:dict(){}tuple()(), 等等。 - Remi Guan
相关:Python对象初始化性能 - ShadowRanger
3个回答

35
一个是函数调用,另一个是字面量。
>>> import dis
>>> def f1(): return list()
... 
>>> def f2(): return []
... 
>>> dis.dis(f1)
  1           0 LOAD_GLOBAL              0 (list)
              3 CALL_FUNCTION            0
              6 RETURN_VALUE        
>>> dis.dis(f2)
  1           0 BUILD_LIST               0
              3 RETURN_VALUE        

使用第二种形式。它更符合Python的风格,并且可能更快(因为它不涉及加载和调用单独的函数)。

30
为了完整起见,另一个需要注意的是,list((a,b,c))将返回[a,b,c],而[(a,b,c)]不会展开元组。当你想要将元组转换为列表时,这可以非常有用。反过来也是一样的,tuple([a,b,c])返回(a,b,c)
注:正如orlp所提到的,这适用于任何可迭代对象,而不仅仅是元组。

5
我认为这是最重要的区别,因为它实际上会产生不同的结果。 - SethMMorton
1
这适用于任何可迭代对象。 - orlp
1
另一个区别是当您同时调用函数map()时。其中一个将对象转换为列表,而另一个则仅通过[]包装对象。 - Dr. Younes Henni

18

list是一个全局名称,可能在运行时被覆盖。 list() 调用了该名称。

[]始终是一个列表字面量。


14
注意,只有可怕的人才会覆盖list。(尽管这是一个好观点。):P - tckmn
从SO上所有使用list(和strdict)作为变量名的问题来看,我倾向于同意@Doorknob的观点。 :) - PM 2Ring
@tckmn,糟糕的程序员 :) - Scott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接