code: def _set_dict_value_by_path(d, val, path):
      
      tmp_path = deepcopy(path)
      tmp_d = deepcopy(d)
      result = tmp_d
      while len(tmp_path) > 0:
          if len(tmp_path) == 1:
              result[tmp_path[0]] = val
              break
          k = tmp_path.pop(0)
          result = result[k]
      return tmp_d
docs: Given a dict (``d``), a value (``val``),  and a list specifying the
      hierarchical path to a key in that dict (``path``), set the value in ``d``
      at ``path`` to ``val``.
  
      :param d: the dict to search in
      :type d: dict
      :param path: the path to the key in the dict
      :type path: list
      :raises: TypeError if the path is too short
      :returns: the modified dict