Skip to content

Commit 2708578

Browse files
authored
bpo-11572: Make minor improvements to copy module (GH-8208)
* 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.
1 parent 9863de0 commit 2708578

File tree

2 files changed

+10
-25
lines changed

2 files changed

+10
-25
lines changed

Lib/copy.py

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -75,24 +75,20 @@ def copy(x):
7575
if copier:
7676
return copier(x)
7777

78-
try:
79-
issc = issubclass(cls, type)
80-
except TypeError: # cls is not a class
81-
issc = False
82-
if issc:
78+
if issubclass(cls, type):
8379
# treat it as a regular class:
8480
return _copy_immutable(x)
8581

8682
copier = getattr(cls, "__copy__", None)
87-
if copier:
83+
if copier is not None:
8884
return copier(x)
8985

9086
reductor = dispatch_table.get(cls)
91-
if reductor:
87+
if reductor is not None:
9288
rv = reductor(x)
9389
else:
9490
reductor = getattr(x, "__reduce_ex__", None)
95-
if reductor:
91+
if reductor is not None:
9692
rv = reductor(4)
9793
else:
9894
reductor = getattr(x, "__reduce__", None)
@@ -146,26 +142,22 @@ def deepcopy(x, memo=None, _nil=[]):
146142
cls = type(x)
147143

148144
copier = _deepcopy_dispatch.get(cls)
149-
if copier:
145+
if copier is not None:
150146
y = copier(x, memo)
151147
else:
152-
try:
153-
issc = issubclass(cls, type)
154-
except TypeError: # cls is not a class (old Boost; see SF #502085)
155-
issc = 0
156-
if issc:
148+
if issubclass(cls, type):
157149
y = _deepcopy_atomic(x, memo)
158150
else:
159151
copier = getattr(x, "__deepcopy__", None)
160-
if copier:
152+
if copier is not None:
161153
y = copier(memo)
162154
else:
163155
reductor = dispatch_table.get(cls)
164156
if reductor:
165157
rv = reductor(x)
166158
else:
167159
reductor = getattr(x, "__reduce_ex__", None)
168-
if reductor:
160+
if reductor is not None:
169161
rv = reductor(4)
170162
else:
171163
reductor = getattr(x, "__reduce__", None)
@@ -198,10 +190,7 @@ def _deepcopy_atomic(x, memo):
198190
d[complex] = _deepcopy_atomic
199191
d[bytes] = _deepcopy_atomic
200192
d[str] = _deepcopy_atomic
201-
try:
202-
d[types.CodeType] = _deepcopy_atomic
203-
except AttributeError:
204-
pass
193+
d[types.CodeType] = _deepcopy_atomic
205194
d[type] = _deepcopy_atomic
206195
d[types.BuiltinFunctionType] = _deepcopy_atomic
207196
d[types.FunctionType] = _deepcopy_atomic

Lib/pickle.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -510,11 +510,7 @@ def save(self, obj, save_persistent_id=True):
510510
rv = reduce(obj)
511511
else:
512512
# Check for a class with a custom metaclass; treat as regular class
513-
try:
514-
issc = issubclass(t, type)
515-
except TypeError: # t is not a class (old Boost; see SF #502085)
516-
issc = False
517-
if issc:
513+
if issubclass(t, type):
518514
self.save_global(obj)
519515
return
520516

0 commit comments

Comments
 (0)