code: def save_global(self, obj, name=None, pack=struct.pack):
          
          if obj.__module__ == "__builtin__" or obj.__module__ == "builtins":
              if obj in _BUILTIN_TYPE_NAMES:
                  return self.save_reduce(_builtin_type, (_BUILTIN_TYPE_NAMES[obj],), obj=obj)
  
          if name is None:
              name = obj.__name__
  
          modname = getattr(obj, "__module__", None)
          if modname is None:
              try:
                  # whichmodule() could fail, see
                  # https://bitbucket.org/gutworth/six/issues/63/importing-six-breaks-pickling
                  modname = pickle.whichmodule(obj, name)
              except Exception:
                  modname = '__main__'
  
          if modname == '__main__':
              themodule = None
          else:
              __import__(modname)
              themodule = sys.modules[modname]
              self.modules.add(themodule)
  
          if hasattr(themodule, name) and getattr(themodule, name) is obj:
              return Pickler.save_global(self, obj, name)
  
          typ = type(obj)
          if typ is not obj and isinstance(obj, (type, _class_type)):
              self.save_dynamic_class(obj)
          else:
              raise pickle.PicklingError("Can't pickle %r" % obj)
docs: Save a "global".
  
          The name of this method is somewhat misleading: all types get
          dispatched here.