问题描述
使用继承dict的类对象进行深度拷贝时,出现报错。
问题诊断
查看deepcopy的源码,发现使用原始dict,_deepcopy_dict方法里x.items()能正常遍历,使用继承dict的类对象却无法遍历出正常的value。
正常遍历的情况:
异常遍历的情况:
由于无法获取value,进而无法进行拷贝。
解决办法
解决办法一:使用原始dict传参,不使用继承dict的类对象
解决办法二:实现一个deepcopy方法
办法二实现如下:
查看自定义类的实现,是由构造函数传入一个待拷贝对象,然后复制给自身self[tname] = json_data[jname]。
那么可以将自身作为构造函数的入参传入,得到一个自定义的dict对象。
然后x.items()遍历各个键值对进行深拷贝,判断为自定义的dict对象,则用自身的deepcopy方法;原始dict,则使用copy.deepcopy()方法。