The example below is odd to me. Arrays a and c are different, but at modification of the first element of a, the first element of c changes as well. Why is the numpy array implemented like this? If a is assigned as a list, changing the first element of a does not change the first element of c. I cannot think of any example where the behavior of the numpy array would be desired.
import numpy as np
a = np.arange(3,5)
#a = [3, 4]
b = a
c = a[:]
d = a.copy()
print(a is b) # True
print(a is c) # False
print(a is d) # False
print(a, b, c, d) #[3 4] [3 4] [3 4] [3 4]
a[0] = -11.
print(a, b, c, d) #[-11 4] [-11 4] [-11 4] [3 4] HUH?!
a[:]is different for lists and arrays; the__getitem__indexing methods are different.