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

Python dataclass设置列表默认值出现mutable default报错如何解决

错误原因

Python的dataclass禁止直接为可变类型(包括list、dict、set等)设置字面量默认值,核心原因是类定义阶段就会生成这个可变对象,后续所有类实例都会共享同一个对象,很容易引发意料之外的属性修改问题,因此报错提示要求用default_factory来生成默认值。

修复方案

你开启了frozen=True的不可变类特性,修复后代码如下:

from dataclasses import dataclass, field

@dataclass(frozen=True)
class MyClass:
    my_list: list = field(default_factory=lambda: ["list1", "list2", "list3"])
    my_list2: list = field(default_factory=lambda: ["list1", "list2", "list3"])

补充说明

  • default_factory接收一个无参可调用对象,每次创建类实例的时候都会调用这个对象生成全新的默认值,避免了所有实例共享同一个可变对象的问题
  • 如果你需要访问字段默认值,不能直接用MyClass.my_list的方式访问,需要先实例化类:执行print(MyClass().my_list)即可正常输出
  • 如果多个字段的默认列表内容完全相同,也可以单独定义生成默认列表的函数复用:
from dataclasses import dataclass, field

def get_default_list():
    return ["list1", "list2", "list3"]

@dataclass(frozen=True)
class MyClass:
    my_list: list = field(default_factory=get_default_list)
    my_list2: list = field(default_factory=get_default_list)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:39:05