解惑 python 的 list 是叫做 list 而不是 array(数组)
此贴回复一下这个帖子中的一个吐糟python 编程入门 - 学习笔记(上篇)
@abspath 先引入两个概念
什么是线性表:
线性表,全名为线性存储结构,将数据组合起来达到一个线性的效果的数据结构,不强物理调存储空间的连续性,可以连续也可以不连续
什么是数组:
数组数据结构,由相同类型的元素的集合所组成的数据结构也被成为阵列,强调物理存储空间的连续性
ps: 数组也算是线性表中的一个数据结构,所以数组是细分的一类,线性表是大类
什么是list:
在python中是这样定义list这个数据结构的“支持多种复合数据类型,可将不同值组合在一起”
将不同数据类型组合到一起,那是不是线性的呢?这里又引入一个概念,所有的python的变量以及字面量,都是引用
指向的都是同一个内存地址,在python的程序运行中,解析器会把源码中的引用替换成内存地址(不严谨的说法,此项不在此篇展开说) 所以在python中做的数据操作都是在通过引用来操作源数据而不是直接操作的源数据
再回到原来的话题,既然python中的都是引用,那list存储的是不是都是一些内存地址,而不是直接存储的源数据呢?查看list的源码
通过源码解惑,在python解析器里的list的结构体中可以看到是一个指针数组,存储的ob_item
的指针,所以说list是一个线性存储的数据结构
这样python中的list的定义是“支持多种复合数据类型,可将不同值组合在一起的线性数据结构”所以list的定义更符合线性表的定义而不是数组,所以python团队给这个数据线结构起名为list是没问题的
ps: 什么?你问我为什么不在帖子里直接回复?那当然是我要水一贴啦😋
-
Python
js是一个弱类型的语言,他本身就是对类型并不敏感,甚至可以有意的忽略掉类型这个概念来开发,所以对于js的数据结构来说,元素是什么类型并不重要了,只要能存并且满足数据结构的特性就行
js的数组其实屏蔽了很多细节,你能当作队列来用能当作栈来用也能当作数组还有map来用
属于是一种多功能的数据结构,你叫他是栈也行,队列也行,甚至map也行
python算是一个强类型的语言,他之所以能在部分时候忽视类型是因为他本身的特性的原因,即我帖子里所说的在python中可以说是没有变量,字面量,只是一个内存的地址而已。对变量的类型变化操作只是在更换内存地址而已