DEV Community

drake
drake

Posted on

Python列表的性能劣势(动态数组)

其实这不仅仅存在于Python,其存在于很多语言中,”动态数组“在很多语言中都有实现,在Python中叫”list“;只要是动态数组都有这个缺陷


  • 1、空间占用冗余

    动态数组的实现是基于标准数组;一开始会创建个固定大小的标准数组,当满了的时候就扩容为原来等两倍(也有可能是其他倍数,通行标准是2倍,这样时间复杂度最小),这就产生了一个问题:在内存利用率上产生了较大的冗余;最极端的情况会趋近于一倍

  • 2、内存碎片

    由于扩容的时候分配的内存空间并不是连续的,而在动态数组的生命周期内又会反复的扩容,这就可能导致大量的内存碎片的出现

    • 2.1、内存浪费:由于内存碎片过小导致这些碎片无法被分配调用,大量这样的小碎片就导致了实际有内存没用,但是应用就是无内存可分配
    • 2.2、增加分配算法的负荷:分配算法需要不断修改内存碎片的分布,这可能导致性能下降
    • 2.3、增加分配时间:为了找到一块连续的内存空间,操作系统需要在大量的内存中碎片中寻找
    • 2.4、提高CPU负载:为了管理大量的内存碎片,会占用较高的CPU资源

Oldest comments (0)