吉吉于

【Python】list内存分配的可视化分析

在Python中,列表是一个动态的指针数组,而array模块所提供的array对象则是保存相同类型的数值的动态数组。

由于array直接保存值,因 此它所使用的内存比列表少。列表和array都是动态数组,因此往其中添加新元素,

而没有空间保存新的元素时,它们会自动重新分配内存块,并将原来的内存 中的值复制到新的内存块中。

为了减少重新分配内存的次数,通常每次重新分配时,大小都为原来的k倍。

k值越大,则重新分配内存的次数越少,但浪费的空间越 多。

通过一系列的实验观察列表和array的内存分配模式。

1.

sys.getsizeof()可以获得列表所占用的内存大小。

图中每个阶梯跳变的位置都表示一次内存分配,而每个阶梯的长度表示内存分配多出来的大小。

Screen Shot 2013 10 30 at 下午8 12 15

2.

由图可知曲线呈指数增长,第45次分配内存时,列表的大小已经接近10000。

Screen Shot 2013 10 30 at 下午8 13 22

3.

为了计算增长率,只需要计算resize_pos数组前后两个值的商的平均值即可。

1.16949524704
[Finished in 0.3s]

======================

ok,等会还得写ppt,有机会再写array的内存分配

 

 

 

 

转载请注明:于哲的博客 » 【Python】list内存分配的可视化分析