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

Python数组变量为何需用[:]赋值才会更新?LeetCode旋转数组解惑

旋转数组函数的赋值问题解答

核心原因:变量重新绑定 vs 原地修改列表内容

你的代码问题出在Python中变量赋值和切片赋值的本质区别:

  • 函数接收的nums参数,一开始指向的是LeetCode传入的原始列表对象。
  • 前两行的nums[:n - k] = ...和nums[n - k:] = ...都是原地修改原始列表:切片赋值操作会直接修改当前nums指向的列表对象的内容,不会改变变量的指向。
  • 而nums = nums[::-1]这行是重新绑定函数内部的nums变量:nums[::-1]会生成一个全新的反转列表,然后让函数里的nums变量指向这个新列表,完全和原始列表断开了关联。这时候原始列表的内容还是第6行执行后的状态,所以LeetCode判题时看不到最后一步的反转效果。

为什么nums[:] = nums[::-1]能解决问题

nums[:]代表取整个列表的切片,对这个切片赋值时,Python会把原始列表的所有元素替换成nums[::-1]生成的新列表的元素,整个过程是在原始列表对象上原地修改,没有改变变量的指向。这样LeetCode传入的原始列表内容就会被正确修改,判题系统就能得到预期的结果。

简单示例验证

def wrong_rotate(nums):
    nums = nums[::-1]  # 重新绑定变量,原列表不变

def correct_rotate(nums):
    nums[:] = nums[::-1]  # 原地修改原列表

a = [1,2,3]
wrong_rotate(a)
print(a)  # 输出 [1,2,3],原列表未被修改
correct_rotate(a)
print(a)  # 输出 [3,2,1],原列表内容被修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:48:10