diff options
-rw-r--r-- | Lib/copy.py | 23 |
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 |