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.
diff --git a/Lib/copy.py b/Lib/copy.py
index ef15982..51c375d 100644
--- a/Lib/copy.py
+++ b/Lib/copy.py
@@ -111,14 +111,13 @@
 		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 @@
 	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