Only try to intern str objects when unpickling attributes.
This matches the behaviour implmented in _pickle.
diff --git a/Lib/pickle.py b/Lib/pickle.py
index b94b305..720c1a0 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -1195,15 +1195,13 @@
         if isinstance(state, tuple) and len(state) == 2:
             state, slotstate = state
         if state:
-            d = inst.__dict__
+            inst_dict = inst.__dict__
             intern = sys.intern
-            try:
-                for k, v in state.items():
-                    d[intern(k)] = v
-            # keys in state don't have to be strings
-            # don't blow up, but don't go out of our way
-            except TypeError:
-                d.update(state)
+            for k, v in state.items():
+                if type(k) is str:
+                    inst_dict[intern(k)] = v
+                else:
+                    inst_dict[k] = v
         if slotstate:
             for k, v in slotstate.items():
                 setattr(inst, k, v)