前言
在python中list总共有三种定义方法
typing.List(Python 3.9+ 推荐用list)- 直接写
list - 字面量
[]
三者的核心区别在于用途场景(类型注解 / 运行时创建)和 语法规范(版本兼容性、类型细化能力),下面分维度详细拆解:
核心
| 写法 | 核心用途 | 运行时是否可执行 | 类型注解场景是否合规 |
|---|---|---|---|
typing.List |
旧版类型注解(泛型列表) | ×(仅注解) | 3.5-3.8 合规 |
list |
新版类型注解/运行时创建列表 | √(创建+注解) | 3.9+ 注解合规 |
[] |
运行时创建空列表 | √(仅创建) | ×(注解会报错) |
具体区别
typing.List:Python 3.9 前的泛型类型注解
typing.List 是 Python 3.5 引入类型注解后,专门用于标注列表的泛型类型的工具(属于「类型提示」,不影响运行时)。
特点:
- 支持细化列表元素类型(泛型):比如
List[int]表示「元素全是整数的列表」; - 仅用于类型注解,不能直接用来创建列表(
typing.List()会报错); - Python 3.9 后被官方标记为「过时」,推荐用内置
list替代。
示例:
|
|
直接写 list:双用途(3.9+ 注解 + 运行时创建)
list 是 Python 内置的列表类型,有两个核心场景:
场景1:运行时创建列表(所有 Python 版本通用)
作为构造函数创建列表,等价于 [],但语义更显式:
|
|
场景2:3.9+ 类型注解(替代 typing.List)
Python 3.9 引入「PEP 585」,允许直接用内置 list 做泛型注解,无需导入 typing:
|
|
关键注意:
- 3.8 及以下版本,
list[int]会报错(仅支持List[int]); - 注解时
list必须带泛型(如list[int]),仅写list表示「任意类型的列表」。
[]:运行时创建空列表(最常用)
[] 是创建空列表的字面量语法,纯运行时操作,不能用于类型注解。
特点:
- 比
list()更简洁、性能略优(字面量是解释器直接优化的); - 仅用于创建列表,注解时写
[]会触发语法错误; - 可直接初始化元素:
[1,2,3]是创建带初始值列表的标准写法。
示例:
|
|
对比总结
-
类型注解场景:
- 3.5-3.8:必须用
from typing import List+List[int]; - 3.9+:推荐用
list[int](无需导入,更简洁); - 绝对不要用
[]做注解。
- 3.5-3.8:必须用
-
运行时创建列表:
- 空列表:优先用
[](简洁、高效),list()等价但少用; - 带初始值:直接用
[1,2,3],或list(可迭代对象)(如list(range(5))); - 绝对不要用
typing.List()创建列表(会报错)。
- 空列表:优先用
-
泛型支持:
typing.List和 3.9+ 的list都支持泛型(如List[str]/list[str]);[]无泛型概念,仅能创建列表实例。
实践
|
|
目录