Python中列表本身为何无方括号逗号,与字面量表示有何差异?
核心原因:要区分「代码层面的语法标记」和「内存中实际存储的对象结构」
资料的表述完全准确,两者根本不是一回事:
- 写在.py文件或者REPL里的
[1, 2, 3]是给Python解释器识别用的字面量语法:方括号的作用是告诉解释器「这里需要构造一个列表对象」,逗号是用来分隔不同元素的边界标记。解释器解析完这段文本、完成列表对象的构造之后,这些写在源码里的符号就完成了全部使命,根本不会被存到最终生成的列表对象里。这个逻辑和算术表达式是一样的:你写3 + 5会得到整数8,但你不能说内存里的整数8里还存着一个加号。 - 真正在内存里跑的列表对象,是CPython用C结构体实现的,内部只存几类核心数据:对象的引用计数、类型标记(标识这是个列表类型)、当前存储的元素个数、预分配的内存容量、挨个指向每个元素对象的指针数组。整个结构里没有任何位置存放方括号、逗号这类符号。
你可以写两行代码做个简单验证:不用方括号语法,一样能生成完全等价的列表:
list1 = [1, 2, 3] list2 = list((1, 2, 3))
list1和list2的结构、内容、行为完全没有区别,总不能说list2内部还存着创建它时用的圆括号吧?
至于你平时直接打印列表看到的带方括号、逗号的输出,是Python默认给列表实现的人类友好的文本展示形式——相当于把内存里的结构化数据转成你能看懂的字符串时,特意加上的格式化符号,不是列表本身自带的内容。你完全可以自己写个输出逻辑,把列表打印成1 | 2 | 3这类不带方括号和逗号的格式,列表本身不会有任何变化。
内容的提问来源于stack exchange,提问作者hal
相关产品推荐
相关产品推荐

