Only try to intern str objects when unpickling attributes.

This matches the behaviour implmented in _pickle.
This commit is contained in:
Alexandre Vassalotti 2009-05-25 18:50:33 +00:00
parent f70b129d7c
commit ebfecfde8b
1 changed files with 6 additions and 8 deletions

View File

@ -1195,15 +1195,13 @@ class _Unpickler:
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)