*Semantic change*: when unpickling the instance variables of an
instance, use inst.__dict__.update(value) instead of a for loop with
setattr() over the value.keys().  This is more consistent (the
pickling doesn't use getattr() either but pickles inst.__dict__) and
avoids problems with instances that have a __setattr__ hook.

But it *is* a semantic change (because the setattr hook is no longer
used).  So beware!
diff --git a/Lib/pickle.py b/Lib/pickle.py
index 97eb4e4..7458792 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -843,8 +843,7 @@
         try:
             setstate = inst.__setstate__
         except AttributeError:
-            for key in value.keys():
-                setattr(inst, key, value[key])
+	    inst.__dict__.update(value)
         else:
             setstate(value)
     dispatch[BUILD] = load_build