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

Python两种二维数组初始化方式是否存在实际运行时差异

Python二维布尔数组两种初始化方式的运行时差异

核心性能差异来源

两种写法最终生成的二维布尔数组逻辑完全一致,都不会出现引用复用的bug(因为False是不可变基础类型),但执行路径的区别带来了数量级的性能差:

  • 写法1:dp = [[False for i in range(len(s))] for j in range(len(s))]
    内层使用Python层面的for循环逐元素生成列表,每一次循环都要执行迭代器调度、循环边界校验、临时变量赋值等Python字节码逻辑,所有操作都在解释器层面完成,没有底层优化。当s长度较大时(比如长度为1000时二维数组总元素量达100万),逐元素循环的开销会被急剧放大。
  • 写法2:dp = [[False] * len(s) for j in range(len(s))]
    内层使用Python列表的乘法运算符完成初始化,该操作是C语言层面实现的内置逻辑,会直接一次性分配对应长度的内存块,批量填充指定的不可变值,不需要走Python层的逐元素循环流程,执行效率远高于前者。

注意:该写法仅在填充不可变对象(数字、布尔值、字符串、元组等)时安全,如果填充的是列表、字典这类可变对象,会出现多行引用同一个内存对象的bug,比如dp = [[[]]*n for _ in range(n)]是错误写法。

实际运行表现参考

以s长度为1000(二维数组总元素100万)的场景做本地测试:

  • 写法1的初始化耗时约为70~120ms
  • 写法2的初始化耗时约为2~5ms
    当s长度提升到2000(总元素400万)时,写法1的初始化耗时会涨到300ms以上,LeetCode多数题目的单测试用例时间配额仅为1~2s,初始化步骤占掉近三分之一的时间后,叠加后续DP状态转移的开销,很容易触发超时限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:36:20