# python - zeros - write 2d array to csv java

## How to make a copy of a 2D array in Python? (4)

`X` is a 2D array. I want to have a new variable `Y` that which has the same value as the array `X`. Moreover, any further manipulations with Y should not influence the value of the X.

It seems to me so natural to use `y = x`. But it does not work with arrays. If I do it this way and then changes y, the x will be changed too. I found out that the problem can be solved like that: `y = x[:]`

But it does not work with 2D array. For example:

``````x = [[1,2],[3,4]]
y = x[:]
y= 1000
print x
``````

returns `[ [1000, 2], [3, 4] ]`. It also does not help if I replace `y=x[:]` by `y = x[:][:]`.

Does anybody know what is a proper and simple way to do it?

For 2D arrays it's possible use map function:

``````old_array = [[2, 3], [4, 5]]
# python2.*
new_array = map(list, old_array)
# python3.*
new_array = list(map(list, old_array))
``````

I think np.tile also might be useful

``````>>> a = np.array([0, 1, 2])
>>> np.tile(a, 2)
array([0, 1, 2, 0, 1, 2])
>>> np.tile(a, (2, 2))
array([[0, 1, 2, 0, 1, 2],
[0, 1, 2, 0, 1, 2]])
>>> np.tile(a, (2, 1, 2))
array([[[0, 1, 2, 0, 1, 2]],
[[0, 1, 2, 0, 1, 2]]])
``````

Try this:

``````from copy import copy, deepcopy
y = deepcopy(x)
``````

I'm not sure, maybe `copy()` is sufficient.

Using deepcopy() or copy() is a good solution. For a simple 2D-array case

``````y = [row[:] for row in x]
`````` 