引入:
几个问题:
1.列表的下标为什么从0开始;
2.为什么列表append比insert快;
3.列表append之后,id值为什么不变,即地址不变。
一、内存&类型&连续存储
内存:
单位:1字节=8位
有一个int值1,32位电脑1个整型int占4个字节,1转换成8位为0000 0001,对应有一个内存地址。
有多个整型时,如7、21、39,在内存中分别存放,地址不是连续的,如0x01、ox09、0x17,
如果放在一起,如7为0x01,则21、39分别为0x05、0x09是连续存储的,
取39时,如果知道7的地址0x01,则39的位置为0x01+2*4=0x09。
类型决定了数据在计算机中占多大的存储单位,如一个int占4个字节。
如图
二、顺序表的基本形式
1.基本顺序表
li = [200,389,78,12]
存储li时,会在内存申请5个连续的地址,存放这5个数,分别对应着5个连续的地址,此即基本顺序表。
基本顺序表:
元素连续存储,每个元素所占的存储单元大小固定相同,下标是逻辑地址。Loc(ei) = Loc(e0) + c*i
其中,Loc(ei)是待确定元素地址,Loc(e0)是起始地址,i表示第i个元素,c表示存储单元大小。
li指向首个元素的地址。
基本顺序表存储的数据类型是一样的。
2.元素外置顺序表
列表存储的数据类型不一样时,如li = [12,'ab',1.11,1000]
先保存200,有一个内存地址,再保存字符串,但是不是连续的,再保存浮点数,和后边的整型,都不是连续保存的,再将它们的内存地址连续保存在内存的其他区域,存储的地址也会占用4位,内存地址的地址是连续的,此即元素外置顺序表。
元素外置顺序表: