From 0a88fdeb6e325d09d90e3bab33b027b9351998e3 Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Tue, 21 Feb 2017 09:07:04 +0300 Subject: [PATCH] bpo-11572: Make several minor improvements to copy module * When doing getattr lookups with a default of "None", it now uses an "is" comparison against None which is more correct * Removed outdated code Patch by Brandon Rhodes. --- Lib/copy.py | 29 +++++++++-------------------- Lib/pickle.py | 6 +----- 2 files changed, 10 insertions(+), 25 deletions(-) diff --git a/Lib/copy.py b/Lib/copy.py index f86040a33c5547..f53cd8c5874954 100644 --- a/Lib/copy.py +++ b/Lib/copy.py @@ -75,24 +75,20 @@ def copy(x): if copier: return copier(x) - try: - issc = issubclass(cls, type) - except TypeError: # cls is not a class - issc = False - if issc: + if issubclass(cls, type): # treat it as a regular class: return _copy_immutable(x) copier = getattr(cls, "__copy__", None) - if copier: + if copier is not None: return copier(x) reductor = dispatch_table.get(cls) - if reductor: + if reductor is not None: rv = reductor(x) else: reductor = getattr(x, "__reduce_ex__", None) - if reductor: + if reductor is not None: rv = reductor(4) else: reductor = getattr(x, "__reduce__", None) @@ -146,18 +142,14 @@ def deepcopy(x, memo=None, _nil=[]): cls = type(x) copier = _deepcopy_dispatch.get(cls) - if copier: + if copier is not None: y = copier(x, memo) else: - try: - issc = issubclass(cls, type) - except TypeError: # cls is not a class (old Boost; see SF #502085) - issc = 0 - if issc: + if issubclass(cls, type): y = _deepcopy_atomic(x, memo) else: copier = getattr(x, "__deepcopy__", None) - if copier: + if copier is not None: y = copier(memo) else: reductor = dispatch_table.get(cls) @@ -165,7 +157,7 @@ def deepcopy(x, memo=None, _nil=[]): rv = reductor(x) else: reductor = getattr(x, "__reduce_ex__", None) - if reductor: + if reductor is not None: rv = reductor(4) else: reductor = getattr(x, "__reduce__", None) @@ -198,10 +190,7 @@ def _deepcopy_atomic(x, memo): d[complex] = _deepcopy_atomic d[bytes] = _deepcopy_atomic d[str] = _deepcopy_atomic -try: - d[types.CodeType] = _deepcopy_atomic -except AttributeError: - pass +d[types.CodeType] = _deepcopy_atomic d[type] = _deepcopy_atomic d[types.BuiltinFunctionType] = _deepcopy_atomic d[types.FunctionType] = _deepcopy_atomic diff --git a/Lib/pickle.py b/Lib/pickle.py index b852fbd2296b40..d533e660af3b23 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -510,11 +510,7 @@ def save(self, obj, save_persistent_id=True): rv = reduce(obj) else: # Check for a class with a custom metaclass; treat as regular class - try: - issc = issubclass(t, type) - except TypeError: # t is not a class (old Boost; see SF #502085) - issc = False - if issc: + if issubclass(t, type): self.save_global(obj) return