The reason that happens is because of the layers of this object:
print(type(c))
print(type(c[0]))
Output:
<class 'numpy.ndarray'>
<class 'numpy.float64'>
As you can see, c is a nested class.
Let's look at the same situation with an easier to understand, nested list:
Without deepcopy:
a = [[3,8],[4,4]]
b = a[:]
print(a)
print(b)
b[0][0] = 9
print(a)
print(b)
Output:
[[3, 8], [4, 4]]
[[3, 8], [4, 4]]
[[9, 8], [4, 4]]
[[9, 8], [4, 4]]
With deepcopy:
from copy import deepcopy
a = [[3,8],[4,4]]
b = deepcopy(a)
print(a)
print(b)
b[0][0] = 9
print(a)
print(b)
Output:
[[3, 8], [4, 4]]
[[3, 8], [4, 4]]
[[3, 8], [4, 4]]
[[9, 8], [4, 4]]