remove is a bit of a special case, however, in that it does the changes in place but does not take a ref, so while the return value is shortened to not include the removed elements, the original is just as long as it was before (which is useful in cases where you want to then set the elements at the end), and you end up with something he is sort of in place and sort of not.