I agree with this, I think a reasonable explanation is something like

> An assignment like `q = p` (or any use of a value by-value, e.g. `foo(p)`) performs a shallow copy, that is, just copying the bytes directly in the value `p`, not following any pointers. For many types, this is considered a "move", and the compiler prevents further access to `p` (until it has been reassigned).

The wording can be improved, and examples/explanation given for why this is necessary.