Let me give you a more detailed example:
float[] test = new float[10];
float[] test2 = new float[10];
test = Enumerable.Range(10, 10).Select(x => (float)x).ToArray();// 10 - 20
test2 = Enumerable.Range(20, 10).Select(x => (float)x).ToArray();// 20 - 30
float[] testBak = test;
test = test2;
test[0] = 1;
Console.WriteLine(test[0]);// prints 1 as it was just modified
Console.WriteLine(test2[0]);// prints 1 because it has the same value of the reference as 'test'
Console.WriteLine(testBak[0]);// prints 10 which is the old value of test[0]
I have rewritten your code using two variables to hold both references of the arrays (which are value types). What you are doing when you are making an assignment is changing the value of the reference which that variable is holding to another value of another reference.
The memory locations which the two arrays hold are still different even after assignment, you are just keeping in your variable another address. This is why if you change the value of one of the entries in the first array, it will be visible in all the variables holding the same reference of that array, but not in the variables holding the reference of another one (as testBak holds an older reference).
testvariable