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

列表切片nums[:]是否创建副本?此代码是否分配额外内存、时间复杂度为O(1)?

问题解答

nums[:] 是否会创建列表的副本?

得分两种场景看:

  • 当nums[:]作为赋值符号右侧的表达式时,它会生成原列表的浅副本;
  • 代码里左侧的nums[:]是切片赋值的目标,它不是创建副本,而是指定要原地修改原列表的所有元素,不会生成新的列表对象。

不过你这段代码里,右侧的nums[-k:] + nums[:-k]会先创建一个完整的新列表,这部分用到了切片生成副本的操作。

是否会分配额外内存?

会。因为nums[-k:] + nums[:-k]会生成一个和原列表长度相同的临时列表,这个临时列表需要占用额外的内存空间。虽然最后是把元素复制回原列表,但这个临时列表的内存分配是不可避免的。

时间复杂度是否为O(1)?

不是,时间复杂度是O(n)(n为列表的长度)。原因如下:

  • 拼接两个切片生成新列表时,需要遍历所有元素完成拼接,这是O(n)的操作;
  • 切片赋值nums[:] = ...会把临时列表里的所有元素逐个复制到原列表中,这也是O(n)的操作。
    两者叠加后,整体时间复杂度为O(n)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:25:27