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

为什么Python的defaultdict采用工厂方法模式实现?

为什么defaultdict用无参工厂函数而非直接存储默认值
  • 避免共享可变对象的问题
    如果直接存储默认值(比如一个空列表),所有新键都会指向同一个对象。比如下面的错误场景:

    # 错误示范:假设直接存默认值列表
    d = {}
    default_val = []
    d['a'] = default_val
    d['a'].append(1)
    # 若访问新键b时返回default_val,结果会是[1],完全不符合预期
    

    而用defaultdict(list)时,每次访问新键都会调用list()生成一个全新的空列表,每个键的默认值都是独立实例,不会互相干扰。

  • 支持动态生成的默认值
    很多场景下默认值不是固定的,需要每次生成新的动态值。比如给每个新键分配随机数、唯一ID或当前时间:

    import random
    from collections import defaultdict
    
    d = defaultdict(lambda: random.randint(1, 10))
    print(d['x'])  # 可能输出3
    print(d['y'])  # 可能输出7,每次都是新的随机数
    

    如果直接存储一个固定值,所有新键都会得到同一个结果,完全达不到动态生成的效果。

  • 统一处理所有类型的逻辑
    不管是不可变类型(如int、str)还是可变类型(如list、dict),用工厂函数的方式能统一逻辑。不需要针对类型可变性做区分:不可变类型看似可以复用值,但可变类型必须生成新实例。用工厂函数的话,所有类型都通过调用函数获取默认值,实现更简洁一致,也避免了开发者额外考虑类型特性的麻烦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:27:04