不使用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
相关产品推荐
相关产品推荐

