You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Numpy数组复制速度慢于Python列表复制?

为什么numpy.copy()复制小型数组比Python列表复制慢?

我需要多次复制一个约10个元素的小型数组/列表(用于树搜索中的状态存储),追求高效复制,但测试发现numpy.copy()的速度慢于Python的list()函数,原本以为两者速度相当。

测试代码

import time

import numpy as np
def numPyArrays(iterations:int):

    initialArray = np.array([1,0,0,1,0,1,1,1,0,0])

    for i in range(iterations):
        nextArray = initialArray.copy()
    
    print(f"Numpy Arrays:\n{nextArray}")
    return    

def pythonLists(iterations:int):

    initialList = [1,0,0,1,0,1,1,1,0,0]

    for i in range(iterations):
        nextList = list(initialList)
    
    print(f"Python Lists:\n{nextList}")
    return

def main():

    numIterations = 10000000

    startTime = time.time()
    numPyArrays(numIterations)
    print(f"Time taken: {round(time.time() - startTime, 2)} seconds.\n")

    startTime = time.time()
    pythonLists(numIterations)
    print(f"Time taken: {round(time.time() - startTime, 2)} seconds.\n")

main()

测试结果

Numpy Arrays:
[1 0 0 1 0 1 1 1 0 0]
Time taken: 4.68 seconds.

Python Lists:
[1, 0, 0, 1, 0, 1, 1, 1, 0, 0]
Time taken: 1.5 seconds.

原因分析

  • Numpy数组的额外开销:Numpy数组是带有元数据(如dtype、形状、strides等)的复杂对象,copy()方法不仅要复制底层数据,还要创建新的数组对象并同步这些元数据。对于仅10个元素的小型数组,元数据操作的开销占比远高于数据复制本身。
  • Python列表的轻量复制:Python列表的list()复制是对现有列表的浅拷贝(这里元素都是不可变整数,等价于深拷贝),列表结构简单,复制时的额外操作极少,在元素数量少的场景下效率优势明显。
  • Numpy的设计定位:Numpy的优化重点是大规模数值批量运算,而非单个小型数组的复制操作。这类小数据结构的操作,Python原生列表的表现反而更高效。

场景适配建议

如果始终处理10个元素左右的小型状态存储,继续使用Python列表会更高效;若后续需要对这些状态进行批量数值运算,可以考虑在运算阶段再转换为Numpy数组,平衡复制效率和运算效率。

内容的提问来源于stack exchange,提问作者davo36

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 21:33:11