列表在内存中的存储空间是连续的,因此在创建列表时,首先向操作系统申请一块固定大小的内存空间,来存储每个列表元素。
例如 a = [1,2,3,4]
, 由于在 python 中, int 类型的数据占4个字节,因此这条语句会向操作系统申请 4*4 = 16 byte 的空间存储列表储存4 个元素。
索引时根据列表第一个元素的内存地址加上列表所存储的数据类型所占的字节数*索引,假设第一个元素的内存地址为 0x001
,a[1] 的内存地址就是 0x001 + 4*1= 0x005,a[3] 的内存地址就是 0x001 + 4*3 = 0x013。
a_list 这个变量指向列表的第一个元素的内存地址。
上面的列表被称为顺序列表,但是顺序列表索引元素是根据每个元素所占的内存字节数来计算内存位置,一旦列表中储存不同的数据类型,就无法计算内存位置。因此在实际中,列表中存的都是数据的内存地址 ,数据放到了内存的其他位置,如下图。