code: def _save(self, acl, predefined, client):
          
          query_params = {"projection": "full"}
          if predefined is not None:
              acl = []
              query_params[self._PREDEFINED_QUERY_PARAM] = predefined
  
          if self.user_project is not None:
              query_params["userProject"] = self.user_project
  
          path = self.save_path
          client = self._require_client(client)
  
          result = client._connection.api_request(
              method="PATCH",
              path=path,
              data={self._URL_PATH_ELEM: list(acl)},
              query_params=query_params,
          )
          self.entities.clear()
          for entry in result.get(self._URL_PATH_ELEM, ()):
              self.add_entity(self.entity_from_dict(entry))
          self.loaded = True
docs: Helper for :meth:`save` and :meth:`save_predefined`.
  
          :type acl: :class:`google.cloud.storage.acl.ACL`, or a compatible list.
          :param acl: The ACL object to save.  If left blank, this will save
                      current entries.
  
          :type predefined: str
          :param predefined:
              (Optional) An identifier for a predefined ACL.  Must be one of the
              keys in :attr:`PREDEFINED_JSON_ACLS` If passed, `acl` must be None.
  
          :type client: :class:`~google.cloud.storage.client.Client` or
                        ``NoneType``
          :param client: Optional. The client to use.  If not passed, falls back
                         to the ``client`` stored on the ACL's parent.