Use __dict__.update(state) instead of for loop over state.items() and
call to setattr(). This changes semantics, following the change already implemented in pickle. Also reindented a few lines properly.
This commit is contained in:
parent
040e565261
commit
e6eef4b4a3
20
Lib/copy.py
20
Lib/copy.py
|
@ -111,14 +111,13 @@ def _copy_inst(x):
|
|||
args = ()
|
||||
y = apply(x.__class__, args)
|
||||
if hasattr(x, '__getstate__'):
|
||||
state = x.__getstate__()
|
||||
state = x.__getstate__()
|
||||
else:
|
||||
state = x.__dict__
|
||||
state = x.__dict__
|
||||
if hasattr(y, '__setstate__'):
|
||||
y.__setstate__(state)
|
||||
y.__setstate__(state)
|
||||
else:
|
||||
for key in state.keys():
|
||||
setattr(y, key, state[key])
|
||||
y.__dict__.update(state)
|
||||
return y
|
||||
d[types.InstanceType] = _copy_inst
|
||||
|
||||
|
@ -225,16 +224,15 @@ def _deepcopy_inst(x, memo):
|
|||
y = apply(x.__class__, args)
|
||||
memo[id(x)] = y
|
||||
if hasattr(x, '__getstate__'):
|
||||
state = x.__getstate__()
|
||||
_keep_alive(state, memo)
|
||||
state = x.__getstate__()
|
||||
_keep_alive(state, memo)
|
||||
else:
|
||||
state = x.__dict__
|
||||
state = x.__dict__
|
||||
state = deepcopy(state, memo)
|
||||
if hasattr(y, '__setstate__'):
|
||||
y.__setstate__(state)
|
||||
y.__setstate__(state)
|
||||
else:
|
||||
for key in state.keys():
|
||||
setattr(y, key, state[key])
|
||||
y.__dict__.update(state)
|
||||
return y
|
||||
d[types.InstanceType] = _deepcopy_inst
|
||||
|
||||
|
|
Loading…
Reference in New Issue