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

不使用copy库实现Python嵌套字典深拷贝,请求代码合理性检查

你的深拷贝函数问题分析与修正

先看你代码里的几个明显问题:

  • 语法错误:第二个for循环下的copy[day][object] = count没有缩进,这在Python里会直接报缩进错误,根本跑不起来,这大概率是你后续出现异常的原因之一。
  • 硬编码星期键的隐患:你提前把copy固定初始化为五个工作日的空字典,如果原字典dictToCopy里有其他星期(比如周六、周日),这些键会被直接忽略,之后访问这些被漏掉的键自然会出现“键不存在”的错误;另外,如果原字典里某个工作日没有数据,你的拷贝字典里依然会保留这个空的子字典,可能和你预期的“完全复刻原字典结构”不符。
  • 深拷贝的适用性:因为你的字典最内层是Integer这种不可变类型,当前的赋值方式是没问题的,但如果后续结构扩展到可变类型(比如列表、子字典),这个实现就不是真正的深拷贝了,不过针对你现在的结构,这部分暂时不是问题。

给你两种修正后的代码方案:

方案1:完全复刻原字典的所有星期键

适合需要保留原字典所有星期条目(包括非工作日)的场景:

def deepCopy(self, dictToCopy):
    copy = {}
    for day, obj_counts in dictToCopy.items():
        # 为每个星期创建独立的子字典,避免引用原对象
        copy[day] = {}
        for obj, count in obj_counts.items():
            copy[day][obj] = count
    return copy

方案2:只拷贝指定的五个工作日

如果只需要处理周一到周五,忽略其他星期:

def deepCopy(self, dictToCopy):
    target_days = {"Monday": {}, "Tuesday": {}, "Wednesday": {}, "Thursday": {}, "Friday": {}}
    for day, obj_counts in dictToCopy.items():
        # 只处理我们需要的工作日键
        if day in target_days:
            for obj, count in obj_counts.items():
                target_days[day][obj] = count
    return target_days

这两种方案都解决了缩进问题,同时避免了因键不匹配导致的“键不存在”错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:35:25