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

为何func无法修改外部orig列表,而func1能修改orig1列表?

Python函数参数传递:修改列表元素影响外部,重新赋值却不影响的原因

你遇到的情况是:两段Python代码中,func函数对形参重新赋值为新列表后,外部的orig列表没有变化;但func1函数修改形参列表的指定元素后,外部的orig1列表被改变了,这和之前“函数无法修改外部变量”的认知冲突。

示例代码

代码1:重新赋值形参为新列表

def func(list):
    list = ['mon', 'tue', 'wed', 'thu','fri','sun']
    return list

orig = ['mon', 'tue', 'wed', 'thu','sat','sun']
ret = func(orig)
print(orig, ret)

代码2:修改形参列表的元素

def func1(list1):
    list1[4]='fri'
    return list1

orig1 = ['mon', 'tue', 'wed', 'thu','sat','sun']
ret1 = func1(orig1)
print(orig1, ret1)

原因解释

Python的参数传递规则是传对象引用,核心区别在于你是操作了引用指向的对象本身,还是改变了引用的指向:

  • 在func里,形参list一开始和外部的orig指向同一个列表对象,但list = 新列表这行代码是把list这个变量重新绑定到了一个全新的列表对象上,和原来的orig彻底没关系了,所以外部的orig不会受到任何影响。
  • 在func1里,形参list1和外部的orig1指向同一个列表对象,list1[4]='fri'是直接修改了这个共享对象内部的元素值,因为两者指向同一个对象,所以外部的orig1自然会看到这个修改结果。

如果想让func也能修改外部的orig列表,不能直接重新赋值新对象,而是要修改原对象的内容,比如:

def func(list):
    list.clear()
    list.extend(['mon', 'tue', 'wed', 'thu','fri','sun'])
    return list

这样操作的是原列表对象,外部的orig就会同步变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:45:56