假设我们就是要保存这样一组数,我们先不要考虑python封装的列表,元组,字典,集合基本数据类型,我们会现在要考虑的就是基本数据类型。

内存:就是存放数据并且直接和计算机打交道的东西。内存是一个连续的存储单元(空间)。

既然是内存他就是一堆存储单元

内存的基本索引单位为一个字节作为索引单位。(一个字节多少位-8位)

我们催出来一个100,我们去哪里照这个100呢?我们应该告诉CPU我们去哪个位置把100取出来。

一个整形是4个字节,如果是10进制的1我们转换成二进制的00000001

一个字符是1个字节

python写内存模块 python内存结构_python


我们看到是解了一个int a=1,但是实际上它占了4个存储单元。

数据类型不同他占的空间不同,char是1个字节。

为什么说数据类型,因为所有的高级的数据结构都是由基本的数据类型组成。基本的数据类型就涉及里面的数据到底要怎样存。

python写内存模块 python内存结构_算法_02


三个整数他们连续地存储起来,连续存放也就是说地址是连续的。(封装的高级类型)集合当中的每个数据都是基本数据类型,每个存储大小也是固定的。通过一次计算我们就能马上定位到他们当中每个元素的位置,因为是连续存储并且每个存储大小固定。顺序表就是按顺序存放,且它的基本数据类型是相同的,并且我们把它展开起来是个表格形式。

python写内存模块 python内存结构_数据结构_03


操作系统在标识我们计算机内存的时候它的最小寻址的单位就是按照字节寻址的。一个字节包含8位,他不可能把每一位都标识出来。

python写内存模块 python内存结构_数据结构_04


村这个东西操作系统一次性返回16个字节。

python写内存模块 python内存结构_python_05


为什么从0计数,就是因为下标代表

python写内存模块 python内存结构_数据结构_06


偏移量,0代表第一个元素代表我不偏移。第四个代表的是跳过前三个。元素外置从操作系统中申请过来的空间不再是存这个元素本身而是要存外置的地址,而非元素本身。

元素外置达到的效果是存储效果是存储不同的数据类型。

同时在扩展的时候,分离式的表头不变,一体式的要变。(如果要考虑数据的动态变换,我们可能要采用分离式的)

下图是加上表头的。

python写内存模块 python内存结构_python写内存模块_07

扩充的时候平衡世家与空间的需求。

python写内存模块 python内存结构_python写内存模块_08


插入元素

非保序的算法复杂度为O(2),但是与保序的元素插入相比相比非保序的元素插入显然不常用,因为它改变了元素的顺序。

python写内存模块 python内存结构_数据类型_09


删除元素

python写内存模块 python内存结构_python_10


把要删除的元素替换为最后一个。

python写内存模块 python内存结构_数据结构_11