编程语言
首页 > 编程语言> > python-OrderedDict子级的深层副本

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