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

如何锁定Python defaultdict的现有键且无需复制?dict(d)是O(1)操作吗?

问题解答

1. 锁定defaultdict现有键的方案

直接修改defaultdict的default_factory属性为None即可,不需要复制任何键值对,操作复杂度为O(1)。
当default_factory被设置为None后,defaultdict的行为会完全和普通字典一致:访问不存在的键时会直接抛出KeyError,不会再自动初始化新键值对,现有键值对也不会受到任何影响。
示例代码:

import collections

d = collections.defaultdict(set)
for i in range(3):
    d[i].add(True)

# 锁定字典,禁止自动生成新键
d.default_factory = None

# 此时访问不存在的键会抛出KeyError,和普通字典一致
print(d[10]) # 抛出 KeyError: 10

如果你不想修改原defaultdict,也可以在访问时用get方法避免意外生成新键:

# 不存在的键返回空集合,不会修改原字典
for b in d.get(10, set()):
    print(b)

2. d = dict(d)的时间复杂度

这个操作不是O(1),而是O(n),n为原字典中键值对的总数量。
dict构造器会遍历原字典的所有键值对,逐个复制到新创建的普通字典实例中,数据量越大,操作耗时越高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:39:04