SF patch 560794 (Greg Chapman): deepcopy can't handle custom

metaclasses.

This is essentially the same problem as that reported in bug 494904
for pickle: deepcopy should treat instances of custom metaclasses the
same way it treats instances of type 'type'.

Bugfix candidate.
This commit is contained in:
Guido van Rossum 2002-06-10 21:10:27 +00:00
parent cf02ac6154
commit 11ade1ddc0

View file

@ -164,17 +164,24 @@ def deepcopy(x, memo = None):
copierfunction = _deepcopy_dispatch[type(x)]
except KeyError:
try:
copier = x.__deepcopy__
except AttributeError:
try:
reductor = x.__reduce__
except AttributeError:
raise error, \
"un-deep-copyable object of type %s" % type(x)
else:
y = _reconstruct(x, reductor(), 1, memo)
issc = issubclass(type(x), type)
except TypeError:
issc = 0
if issc:
y = _deepcopy_dispatch[type](x, memo)
else:
y = copier(memo)
try:
copier = x.__deepcopy__
except AttributeError:
try:
reductor = x.__reduce__
except AttributeError:
raise error, \
"un-deep-copyable object of type %s" % type(x)
else:
y = _reconstruct(x, reductor(), 1, memo)
else:
y = copier(memo)
else:
y = copierfunction(x, memo)
memo[d] = y