我正在编写从Python类dict
或collections.Counter
继承的定制类,并且我面临着deepcopy
的行为问题.问题在于,从dict
继承而不是从Counter
继承时,deepcopy
基本上可以正常工作.
下面是一个例子:
from copy import deepcopy
from collections import Counter
class MyCounter(Counter):
def __init__(self, foo):
self.foo = foo
class MyDict(dict):
def __init__(self, foo):
self.foo = foo
c = MyCounter(0)
assert c.foo == 0 # Success
c1 = deepcopy(c)
assert c1.foo == 0 # Failure
d = MyDict(0)
assert d.foo == 0 # Success
d1 = deepcopy(d)
assert d1.foo == 0 # Success
我有点不明白为什么会发生这种情况,因为Counter
类的源代码似乎没有改变深度副本的任何内容(例如,没有定制__deepcopy__
方法).
我知道我可能必须编写一个定制的__deepcopy__
方法,但我不清楚如何编写.总体而言,我宁愿不必这样做,因为它在dict
上运行得很好.
任何帮助都将不胜感激.