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

Python可变默认参数行为疑问:为何list1运行结果前后不同?

Python可变默认参数的行为陷阱解释

先看你提供的代码:

def check(val, list=[]):
    list.append(val) 
    return list

list1=check("a")
list2=check("b",[])
list3=check("c")

出现这种差异的核心原因是Python函数的可变默认参数只会初始化一次:

  • 当函数check被定义时,默认参数list=[]就已经创建了一个空列表对象,这个对象会一直存在,直到函数被销毁。
  • 第一次调用check("a")时,没有传入list参数,所以使用这个预先创建的默认列表,往里面添加"a",此时list1指向的就是这个默认列表,值为["a"]。
  • 调用check("b", [])时,手动传入了一个新的空列表,这次操作的是你传入的新列表,和默认列表完全无关,所以list2的值是["b"]。
  • 第三次调用check("c")时,再次使用那个已经被修改过的默认列表,往里面添加"c",此时默认列表变成了["a", "c"]。而list1始终指向这个默认列表,所以最后查看list1时,它的值就变成了['a','c']。

单独运行list1=check("a")时,默认列表只被修改了一次,所以list1显示["a"];但三个调用放在一起运行时,第三次调用修改了同一个默认列表,list1作为该列表的引用,自然会同步显示更新后的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:20:37