【Python】list内存分配的可视化分析
30 Oct 2013在Python中,列表是一个动态的指针数组,而array模块所提供的array对象则是保存相同类型的数值的动态数组。
由于array直接保存值,因 此它所使用的内存比列表少。列表和array都是动态数组,因此往其中添加新元素,
而没有空间保存新的元素时,它们会自动重新分配内存块,并将原来的内存 中的值复制到新的内存块中。
为了减少重新分配内存的次数,通常每次重新分配时,大小都为原来的k倍。
k值越大,则重新分配内存的次数越少,但浪费的空间越 多。
通过一系列的实验观察列表和array的内存分配模式。
1.
sys.getsizeof()可以获得列表所占用的内存大小。
图中每个阶梯跳变的位置都表示一次内存分配,而每个阶梯的长度表示内存分配多出来的大小。
2.
由图可知曲线呈指数增长,第45次分配内存时,列表的大小已经接近10000。
3.
为了计算增长率,只需要计算resize_pos数组前后两个值的商的平均值即可。
1.16949524704
[Finished in 0.3s]
======================
ok,等会还得写ppt,有机会再写array的内存分配
转载请注明:于哲的博客 » 【Python】list内存分配的可视化分析