Skip to content

Commit 0f0276d

Browse files
committed
Use walrus operator
1 parent b3ae769 commit 0f0276d

File tree

1 file changed

+17
-24
lines changed

1 file changed

+17
-24
lines changed

Lib/copy.py

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -129,32 +129,25 @@ def deepcopy(x, memo=None, _nil=[]):
129129
copier = _deepcopy_dispatch.get(cls)
130130
if copier is not None:
131131
y = copier(x, memo)
132-
else:
133-
if issubclass(cls, type):
132+
elif issubclass(cls, type):
134133
y = x # atomic copy
134+
elif (copier := getattr(x, "__deepcopy__", None)) is not None:
135+
y = copier(memo)
136+
else:
137+
if (reductor := dispatch_table.get(cls)):
138+
rv = reductor(x)
139+
elif (reductor := getattr(x, "__reduce_ex__", None)) is not None:
140+
rv = reductor(4)
141+
elif (reductor := getattr(x, "__reduce__", None)):
142+
rv = reductor()
135143
else:
136-
copier = getattr(x, "__deepcopy__", None)
137-
if copier is not None:
138-
y = copier(memo)
139-
else:
140-
reductor = dispatch_table.get(cls)
141-
if reductor:
142-
rv = reductor(x)
143-
else:
144-
reductor = getattr(x, "__reduce_ex__", None)
145-
if reductor is not None:
146-
rv = reductor(4)
147-
else:
148-
reductor = getattr(x, "__reduce__", None)
149-
if reductor:
150-
rv = reductor()
151-
else:
152-
raise Error(
153-
"un(deep)copyable object of type %s" % cls)
154-
if isinstance(rv, str):
155-
y = x
156-
else:
157-
y = _reconstruct(x, memo, *rv)
144+
raise Error(
145+
"un(deep)copyable object of type %s" % cls)
146+
147+
if isinstance(rv, str):
148+
y = x
149+
else:
150+
y = _reconstruct(x, memo, *rv)
158151

159152
# If is its own copy, don't memoize.
160153
if y is not x:

0 commit comments

Comments
 (0)