copierfunction = _deepcopy_dispatch[type(x)]
except KeyError:
try:
- copier = x.__deepcopy__
- except AttributeError:
+ issc = issubclass(type(x), type)
+ except TypeError:
+ issc = 0
+ if issc:
+ y = _deepcopy_dispatch[type](x, memo)
+ else:
try:
- reductor = x.__reduce__
+ copier = x.__deepcopy__
except AttributeError:
- raise error, \
- "un-deep-copyable object of type %s" % type(x)
+ 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 = _reconstruct(x, reductor(), 1, memo)
- else:
- y = copier(memo)
+ y = copier(memo)
else:
y = copierfunction(x, memo)
memo[d] = y