Numpy array assignment with copy
B=A creates a reference
B[:]=A makes a copy
numpy.copy(B,A) makes a copy

the last two need additional memory.
To make a deep copy you need to use B = copy.deepcopy(A)
For example, if we have a numpy array A, and we want a numpy array B with the same elements.
What is the difference between the following (see below) methods? When is additional memory allocated, and when is it not?

B = A
B[:] = A (same as B[:]=A[:]?)
numpy.copy(B, A)