python-OrderedDict子级的深层副本
作者:互联网
我已经尝试了复制模块中的Deepcopy.它适用于OrderedDict实例和dict child实例.但这不适用于OrderedDict子级实例.这是一个演示:
from collections import OrderedDict
from copy import deepcopy
class Example2(dict):
def __init__(self,l):
dict.__init__(self,l)
class Example3(OrderedDict):
def __init__(self,l):
OrderedDict.__init__(self,l)
d1=OrderedDict([(1,1),(2,2)])
print(deepcopy(d1)) #OrderedDict([(1, 1), (2, 2)])
d2=Example2([(1,1),(2,2)])
print(deepcopy(d2)) #{1: 1, 2: 2}
d3=Example3([(1,1),(2,2)])
print(deepcopy(d3))
前两个示例按预期工作,但最后一个崩溃,但异常:
TypeError: __init__() missing 1 required positional argument: 'l'
所以问题是:这实际上是什么问题,有可能针对这种情况使用Deepcopy函数吗?
解决方法:
问题是您的Example3类中的构造函数,deepcopy将调用默认的构造函数(no参数一个),但您尚未定义此构造函数,因此导致崩溃.如果将构造函数定义更改为对列表使用可选参数,它将起作用
像这样
class Example3(OrderedDict):
def __init__(self, l = []):
OrderedDict.__init__(self, l)
然后
>>> d3 = Example3([(1, 1), (2, 2)])
>>> print(deepcopy(d3))
Example3([(1, 1), (2, 2)])
标签:ordereddictionary,python 来源: https://codeday.me/bug/20191028/1953719.html