I don’t think your argument is correct, or I misunderstood it (following it we’d have data[9] <- data[6] <- data[3] which is not the case and that’s what OP was asking.
@lmiq is right that data[3:6] is materialised first and then the assignment is done for the 3 entries.
julia> data = [1,2,3];
julia> data = @view(data[3:-1:1])
3-element view(::Vector{Int64}, 3:-1:1) with eltype Int64:
3
2
1
julia> data = [1,2,3];
julia> data[1] = data[3]
data[2] = data[2]
data[3] = data[1]
data
3-element Vector{Int64}:
3
2
3
Semantically, the broadcast will work as if the array on the right is first copied into a new array (I’m not sure if non-copying is guaranteed always, I guess not, sometimes an intermediate is needed).