No, that's because all values of the table are explicitly set to value of first element when the following code is executed:
for i = 1, #x do
x[i].value = x[1].value
end
If, for example, "x" has 3 elements, the loop is then equivalent to:
x[1].value = x[1].value -- value of first element is set to itself
x[2].value = x[1].value -- value of second element is set to value of first element
x[3].value = x[1].value -- value of third element is set to value of first element
And then, when next loop is executed:
for i = 1, #x do
x[i].value = x[2].value
end
"x[2].value" no longer has it's original value, because new value (of "x[1].value") has been assigned to it during execution of previous loop.
This is why only first loop works as intended and all subsequent ones don't. And this is why copy of values needs to be created before the first loop (to have access to original values after table values have been overwritten).