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

Python中向函数传递列表时为何无法直接修改列表本身

Python列表传参修改行为差异的底层原因

核心原因是Python采用传对象引用的参数传递规则,且列表属于可变对象,两类操作的修改目标完全不同:

  • 第一种情况(修改列表元素生效)
    调用myFun(lst)时,形参x和外层的lst指向内存中同一个列表对象,没有生成新的副本。
    x[i] += 2属于就地修改可变对象的内部元素,操作过程中没有改变x的指向,所有修改都是直接作用在共享的列表对象上,因此外层的lst访问同一个对象时就能感知到变化。
  • 第二种情况(给形参赋值新列表不生效)
    传参初期x和lst确实指向同一个列表,但x = [20, 30, 40]属于给局部变量x重新赋值,直接把x的指向修改为了新创建的列表对象,这个操作既不会改变外层lst的指向,也不会修改原列表对象的内容,因此外层的lst不会受到影响。

如果需要让第二种修改对外层生效,可以通过函数返回值重新赋值外层变量:

def myFun(x):
    x = [20, 30, 40]
    return x
lst = [10, 11, 12, 13, 14, 15]
lst = myFun(lst)
print(lst) # 输出 [20, 30, 40]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 07:06:04