You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中创建列表/集合/字典的两种写法:性能差异与规范偏好疑问

Python中列表、集合、字典初始化方式的差异解析

Great question! Let's break this down clearly, covering performance, style guidelines, and the analogous cases for sets and dicts.

1. 列表:[] vs list()

性能差异

毫无疑问,new_list = []的执行速度要比new_list = list()更快。原因很简单:

  • []是列表字面量,Python解释器可以直接识别并创建列表对象,不需要额外的函数调用开销。
  • list()是调用内置构造函数,涉及到函数查找、参数传递(哪怕是空参数)等额外步骤,这些都会增加微小但可测量的耗时。

用timeit工具测试的话(举个直观的例子):

import timeit
print(timeit.timeit('[]', number=10**7))       # 通常在0.1-0.2秒左右
print(timeit.timeit('list()', number=10**7))   # 通常在0.3-0.4秒左右

差距是很明显的,尤其是在大规模循环或者频繁初始化列表的场景下。

规范与偏好

这不仅仅是团队偏好——PEP 8(Python官方风格指南)明确推荐使用字面量[]来初始化空列表,而非list()。原因包括代码更简洁、可读性更高,同时性能更优。当然,如果你需要将其他可迭代对象转换为列表(比如list(range(10))),那list()是必要的,但空列表初始化优先用[]。

2. 字典:{} vs dict()

情况和列表几乎完全一致:

  • 性能上,new_dict = {}比new_dict = dict()更快,同样因为字面量的直接创建方式避免了函数调用开销。
  • PEP 8也推荐用{}初始化空字典,除非你需要用关键字参数创建字典(比如dict(a=1, b=2)),这种场景下dict()写法更简洁。

3. 集合:特殊情况

集合的情况略有不同,因为空集合不能用{}来初始化——{}实际上创建的是空字典!所以空集合只能用set(),这是没得选的。

但对于非空集合:

  • {1, 2, 3}这种集合字面量比set([1, 2, 3])性能更好,因为后者需要先创建一个列表,再将其转换为集合,多了一步开销。
  • PEP 8推荐用集合字面量初始化非空集合,空集合则必须用set()。

总结

  • 性能层面:字面量初始化([]、{}、{1,2,3})比构造函数调用(list()、dict()、set([...]))更快,因为避免了函数调用的额外开销。
  • 规范层面:PEP 8明确推荐字面量优先(除了空集合只能用set()),这是官方认可的最佳实践,而非单纯的团队偏好。
  • 特殊情况:空集合只能用set(),因为{}是字典的字面量。

内容的提问来源于stack exchange,提问作者DavidDG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 17:40:18