深入理解python数组的动态扩容机制以及摊销分析
深入理解python数组的动态扩容机制以及摊销分析
[var1]
(一) 动态数组的运行机制
为了方便列表对元素的增添,python采用了分离式结构动态数组的方法
关于动态序列内部构造方式的介绍 :https://0x9.me/D4qxd
用户持续添加列表元素时,动态数组预留的空间迟早会被耗尽,列表类会向系统请求一个新的,更大的内存空间,并初始化该数组,旧的数组将会被系统收回
(二) 探究数组长度与底层内存分配的关系
测试代码 :
import sys
list,num =[],0
while num <= 26 :
length = len(list)
size = sys.getsizeof(list)
print('length = '+str(length)+' size = '+str(size))
list.append(None)
num += 1
测试结果 :
通过上述的结果趋势图,可以观察出,列表初始化过程中将会申请一个存储四个元素的存储区,当存储区填满时,列表会再次申请四个存储空间存储元素。当元素量达到原存储空间的两倍时,列表会再次申请原来旧的存储空间的两倍的容量存储元素。
(二) 动态扩容机制新内存的申请机制
(1)当旧的底层数组存满时,list类会自动请求一个新的容量为旧的数组两倍的新数组
(2)旧数组中元素将被一次存入新的数组
(3)系统回收旧的数组,并初始化新数组
深入理解python数组的动态扩容机制以及摊销分析相关教程