code: def Save(session, filename=None):
      
  
      if not filename:
          filename = "androguard_session_{:%Y-%m-%d_%H%M%S}.ag".format(datetime.datetime.now())
  
      if os.path.isfile(filename):
          log.warning("{} already exists, overwriting!")
  
      # Setting the recursion limit according to the documentation:
      # https://docs.python.org/3/library/pickle.html#what-can-be-pickled-and-unpickled
      #
      # Some larger APKs require a high recursion limit.
      # Tested to be above 35000 for some files, setting to 50k to be sure.
      # You might want to set this even higher if you encounter problems
      reclimit = sys.getrecursionlimit()
      sys.setrecursionlimit(50000)
      saved = False
      try:
          with open(filename, "wb") as fd:
              pickle.dump(session, fd)
          saved = True
      except RecursionError:
          log.exception("Recursion Limit hit while saving. "
                        "Current Recursion limit: {}. "
                        "Please report this error!".format(sys.getrecursionlimit()))
          # Remove partially written file
          os.unlink(filename)
  
      sys.setrecursionlimit(reclimit)
      return filename if saved else None
docs: save your session to use it later.
  
      Returns the filename of the written file.
      If not filename is given, a file named `androguard_session_<DATE>.ag` will
      be created in the current working directory.
      `<DATE>` is a timestamp with the following format: `%Y-%m-%d_%H%M%S`.
  
      This function will overwrite existing files without asking.
  
      If the file could not written, None is returned.
  
      example::
  
          s = session.Session()
          session.Save(s, "msession.ag")
  
      :param session: A Session object to save
      :param filename: output filename to save the session
      :type filename: string