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

为何无法在函数中重新赋值作为参数传入的列表?

为什么foo()能修改原列表,bar()却不行?

先看这段代码的实际运行输出:

[1,2,3]
[3,2,3]
[3,2,3]

问题的核心在于Python函数参数的传递逻辑——它是传对象引用,不是直接传原对象,也不是传引用的副本。

拆解foo()的工作逻辑

def foo(myList):
  myList[0] = 3

当你把原列表[1,2,3]传给foo时,函数里的myList变量拿到的是原列表对象的引用,指向的是同一个内存里的列表。这时候通过myList[0] = 3修改的是这个列表对象的内部元素,自然会影响到原列表。

拆解bar()的工作逻辑

def bar(myList):
  myList = [3,2,1]

这里的myList = [3,2,1]是给函数内部的myList变量重新赋值,让它指向了一个新创建的列表对象。这时候函数里的myList和原来的列表已经没有关系了,原列表的引用没被改动,所以原列表不会有任何变化。

一句话总结:

  • 操作对象的内部内容(比如改列表元素、调用append之类的方法),会影响原对象;
  • 直接给参数变量赋值新对象,只是换了函数内部变量的指向,和原对象无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:54:27