# Numpy array assignment with copy

PythonArraysNumpy## Python Problem Overview

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)`

## Python Solutions

## Solution 1 - Python

All three versions do different things:

`B = A`

This binds a new name `B`

to the existing object already named `A`

. Afterwards they refer to the same object, so if you modify one in place, you'll see the change through the other one too.

`B[:] = A`

(same as`B[:]=A[:]`

?)

This copies the values from `A`

into an existing array `B`

. The two arrays must have the same shape for this to work. `B[:] = A[:]`

does the same thing (but `B = A[:]`

would do something more like 1).

`numpy.copy(B, A)`

This is not legal syntax. You probably meant `B = numpy.copy(A)`

. This is almost the same as 2, but it creates a new array, rather than reusing the `B`

array. If there were no other references to the previous `B`

value, the end result would be the same as 2, but it will use more memory temporarily during the copy.

Or maybe you meant `numpy.copyto(B, A)`

, which is legal, and is equivalent to 2?

## Solution 2 - Python

`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)`

## Solution 3 - Python

This is the only working answer for me:

```
B=numpy.array(A)
```