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

Python归并排序递归调用中列表修改为何在调用结束后仍生效?

归并排序递归参数修改生效问题解答

这个现象和递归没有任何关系,是Python处理可变对象参数的固有逻辑:

  • Python中列表属于可变对象,所有变量存储的都是对象的内存引用,当你把列表作为参数传入函数时,传入的是该列表的内存地址引用。函数内部对列表元素的修改,都是直接操作内存中同一个列表对象,所以函数调用结束后,外部的列表变量自然能看到修改结果。
  • 你可以用完全不涉及递归的简单代码验证该逻辑:
def modify_list(lst):
    lst[0] = 99

test = [1,2,3]
modify_list(test)
print(test) # 输出结果为[99, 2, 3],和你在递归场景看到的效果完全一致
  • 对应到你贴的归并排序代码:L = arr[:mid]是对原数组做切片浅拷贝,生成了独立于原arr的新列表对象,调用mergeSort(L)时,L作为列表被传入函数,递归内部对L元素的排序操作就是直接修改该列表本身的内容,所以递归调用返回后,L已经是排好序的状态。

补充说明:如果传入函数的是整数、字符串、元组这类不可变对象,函数内部对参数的修改只会生成新的对象,不会影响外部的原变量,这是可变对象和不可变对象的核心差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:12:03