解惑 python 的 list 是叫做 list 而不是 array(数组)

此贴回复一下这个帖子中的一个吐糟python 编程入门 - 学习笔记(上篇)

image.png

@abspath 先引入两个概念

什么是线性表

线性表,全名为线性存储结构,将数据组合起来达到一个线性的效果的数据结构,不强物理调存储空间的连续性,可以连续也可以不连续

什么是数组

数组数据结构,由相同类型的元素的集合所组成的数据结构也被成为阵列,强调物理存储空间的连续性

ps: 数组也算是线性表中的一个数据结构,所以数组是细分的一类,线性表是大类

什么是list:

在python中是这样定义list这个数据结构的“支持多种复合数据类型,可将不同值组合在一起”

将不同数据类型组合到一起,那是不是线性的呢?这里又引入一个概念,所有的python的变量以及字面量,都是引用
image.png

指向的都是同一个内存地址,在python的程序运行中,解析器会把源码中的引用替换成内存地址(不严谨的说法,此项不在此篇展开说) 所以在python中做的数据操作都是在通过引用来操作源数据而不是直接操作的源数据

再回到原来的话题,既然python中的都是引用,那list存储的是不是都是一些内存地址,而不是直接存储的源数据呢?查看list的源码
image.png
通过源码解惑,在python解析器里的list的结构体中可以看到是一个指针数组,存储的ob_item的指针,所以说list是一个线性存储的数据结构

这样python中的list的定义是“支持多种复合数据类型,可将不同值组合在一起的线性数据结构”所以list的定义更符合线性表的定义而不是数组,所以python团队给这个数据线结构起名为list是没问题的

ps: 什么?你问我为什么不在帖子里直接回复?那当然是我要水一贴啦😋