setVal() reuses existing values

ensures that an existing reference to a path via .get(key).at(index)
will still point to the value even if it is changed (note: does not
handle list push/pop/etc)