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

Python将列表对象传入函数后修改行为不一致的原因咨询

两段Python代码运行差异的原因

Python的参数传递规则为传对象引用:函数调用时不会复制传入的对象本身,函数内的参数变量和外部传入的变量初始指向内存中的同一个对象,最终运行效果的差异完全取决于你对参数变量执行的操作类型。

第一段代码逻辑说明

对应代码:

temp = [1, 2, 3]
def add_more(l):
    l.append(5)
add_more(temp)
print(temp)

运行后原temp被修改的原因:

  • 调用add_more(temp)时,函数内局部变量l和外部的temp指向同一个列表对象[1, 2, 3]
  • l.append(5)属于原地修改操作,直接在指向的列表对象末尾新增元素,没有改变l本身的指向,所以修改会直接作用到原对象上,外部temp访问同一对象时会得到更新后的结果[1, 2, 3, 5]

第二段代码逻辑说明

对应代码:

temp = [1, 2, 3]
def add_more(l):
    l = []
add_more(temp)
print(temp)

运行后原temp无变化的原因:

  • 函数调用初始阶段,局部变量l同样和temp指向同一个列表对象
  • l = []属于重新赋值操作:会在内存中新建一个空列表对象,再将局部变量l的指向修改为这个新的空列表,该操作仅修改局部变量l本身的指向,完全不会触碰原列表对象,所以外部temp的指向没有任何变化,输出仍为[1, 2, 3]

核心差异总结

  • 对列表、字典这类可变对象执行append/pop/extend等原地修改方法时,修改会作用到原对象,外部可见
  • 对参数变量直接执行=赋值操作时,仅修改函数内局部变量的指向,不会影响外部原变量和对应的对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:39:01