I think this behavior is even more interesting. It seems as if a struct cannot free the pointer to an array. So once you assigned it a value, it would most likely be copied in the future.
In this example no copy is made:
function tmp
format debug
x= rand(1,5);
x
y = x;
y
clear y
x = x+1;
x
end
In this example x is copied in the line x = x+1, probably since clear s, didn't free the array.
function tmp
format debug
s.x = rand(1, 10);
x = s.x;
clear s
x
x = x+1;
x
end