Several routines appeared to inline the guts of memoize(), possibly for
some notion of low-level efficiency.  Undid that, but left one routine
alone:  save_inst() claims it has a reason for not using memoize().
I don't understand that comment, so added an XXX comment there.
diff --git a/Lib/pickle.py b/Lib/pickle.py
index 58c4ba0..daae16e 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -215,10 +215,9 @@
         # But there appears no advantage to any other scheme, and this
         # scheme allows the Unpickler memo to be implemented as a plain (but
         # growable) array, indexed by memo key.
-        d = id(obj)
         memo_len = len(self.memo)
         self.write(self.put(memo_len))
-        self.memo[d] = memo_len, obj
+        self.memo[id(obj)] = memo_len, obj
 
     # Return a PUT (BINPUT, LONG_BINPUT) opcode string, with argument i.
     def put(self, i):
@@ -325,9 +324,7 @@
                                  "by %s must be a tuple" % reduce
 
         self.save_reduce(callable, arg_tup, state)
-        memo_len = len(memo)
-        self.write(self.put(memo_len))
-        memo[d] = (memo_len, object)
+        self.memoize(object)
 
     def persistent_id(self, object):
         return None
@@ -472,9 +469,8 @@
             write(POP * (len(object) + 1) + self.get(memo[d][0]))
             return
 
-        memo_len = len(memo)
-        self.write(TUPLE + self.put(memo_len))
-        memo[d] = (memo_len, object)
+        self.write(TUPLE)
+        self.memoize(object)
 
     dispatch[TupleType] = save_tuple
 
@@ -566,6 +562,9 @@
 
         # This method does not use memoize() so that it can handle
         # the special case for non-binary mode.
+        # XXX What did that comment mean?  That is, what "special case for
+        # XXX non-binary mode?  It sure *looks* like nothing special is
+        # XXX happening in the INST case.
         memo_len = len(memo)
         if self.bin:
             write(OBJ + self.put(memo_len))
@@ -612,10 +611,8 @@
                     "Can't pickle %r: it's not the same object as %s.%s" %
                     (object, module, name))
 
-        memo_len = len(memo)
-        write(GLOBAL + module + '\n' + name + '\n' +
-            self.put(memo_len))
-        memo[id(object)] = (memo_len, object)
+        write(GLOBAL + module + '\n' + name + '\n')
+        self.memoize(object)
     dispatch[ClassType] = save_global
     dispatch[FunctionType] = save_global
     dispatch[BuiltinFunctionType] = save_global