Unexpected copy when pushing

No. For immutables, it is actually undefined what happens under the hood, when the user can’t tell the difference. This gives the compiler room for optimizations, see eg a recent discussion.

I think that the general rule in Base and the standard library is that things are never copied implicitly, but converted when necessary. See

https://docs.julialang.org/en/v1/manual/conversion-and-promotion/#When-is-convert-called?-1