summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/copy.py23
1 files changed, 15 insertions, 8 deletions
diff --git a/Lib/copy.py b/Lib/copy.py
index 77b7ad3..7d06042 100644
--- a/Lib/copy.py
+++ b/Lib/copy.py
@@ -164,17 +164,24 @@ def deepcopy(x, memo = None):
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