python 动态执行 内存变化_深入理解python数组的动态扩容机制以及摊销分析

本文深入探讨了Python列表(动态数组)的扩容机制,解释了当数组空间耗尽时,如何请求更大内存并初始化新数组,以及旧数组的回收过程。通过测试代码展示了数组长度与底层内存分配的关系,指出列表在存储空间达到原容量两倍时会申请新容量为原两倍的存储空间。
摘要由CSDN通过智能技术生成

深入理解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

测试结果 :

9675c9c6ce23740f2fbafc37a8b87c22.png

508325b999d320b2889fba08c66d6b48.png

通过上述的结果趋势图,可以观察出,列表初始化过程中将会申请一个存储四个元素的存储区,当存储区填满时,列表会再次申请四个存储空间存储元素。当元素量达到原存储空间的两倍时,列表会再次申请原来旧的存储空间的两倍的容量存储元素。

(二) 动态扩容机制新内存的申请机制

(1)当旧的底层数组存满时,list类会自动请求一个新的容量为旧的数组两倍的新数组

(2)旧数组中元素将被一次存入新的数组

(3)系统回收旧的数组,并初始化新数组

fb11333c057c5659f693961c786028bb.png

深入理解python数组的动态扩容机制以及摊销分析相关教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值