# NumPy Copy and View of Array

Last Updated : 01 Feb, 2024

While working with NumPy, you might have seen some functions return the copy whereas some functions return the view.

The main difference between copy and view is that the copy is the new array whereas the view is the view of the original array. In other words, it can be said that the copy is physically stored at another location and the view has the same memory location as the original array.

## View of Array in NumPy

The view is just a view of the original ndarray and the view does not own the data.

You can create an array view using the view() function of the NumPy library.

This is also known as Shallow Copy

When we make changes to the view it affects the original array, and when changes are made to the original array it affects the view.

## Python3

 `import` `numpy as np  ` `# creating array  ` `arr ``=` `np.array([``2``, ``4``, ``6``, ``8``, ``10``])  ` `# creating view  ` `v ``=` `arr.view()  ` `# both arr and v have different id  ` `print``(``"id of arr"``, ``id``(arr))  ` `print``(``"id of v"``, ``id``(v))  ` `# changing original array  ` `# will effect view  ` `arr[``0``] ``=` `12` `# printing array and view  ` `print``(``"original array- "``, arr)  ` `print``(``"view- "``, v)`

Output:

```id of arr 30480448
id of v 30677968
original array-  [12  4  6  8 10]
view-  [12  4  6  8 10]
```

## Copy of Array in NumPy

The copy is completely a new array and the copy owns the data.

You can create a copy of an array using the copy() function of the NumPy library.

This is also known as Deep Copy.

When we make changes to the copy it does not affect the original array, and when changes are made to the original array it does not affect the copy.

## python3

 `import` `numpy as np ` ` `  `# creating array ` `arr ``=` `np.array([``2``, ``4``, ``6``, ``8``, ``10``]) ` ` `  `# creating copy of array ` `c ``=` `arr.copy() ` ` `  `# both arr and c have different id ` `print``(``"id of arr"``, ``id``(arr)) ` `print``(``"id of c"``, ``id``(c)) ` ` `  `# changing original array ` `# this will not effect copy ` `arr[``0``] ``=` `12` ` `  `# printing array and copy ` `print``(``"original array- "``, arr) ` `print``(``"copy- "``, c) `

Output:

```id of arr 35406048
id of c 32095936
original array-  [12  4  6  8 10]
copy-  [ 2  4  6  8 10]
```

## Assigning Array to Variable

Normal assignments do not make a copy of an array object. Instead, it uses the same ID of the original array to access it.

Any changes in either get reflected in the other.

## python3

 `import` `numpy as np ` ` `  `# creating array ` `arr ``=` `np.array([``2``, ``4``, ``6``, ``8``, ``10``]) ` ` `  `# assigning arr to nc ` `nc ``=` `arr ` ` `  `# both arr and nc have same id ` `print``(``"id of arr"``, ``id``(arr)) ` `print``(``"id of nc"``, ``id``(nc)) ` ` `  `# updating nc ` `nc[``0``]``=` `12` ` `  `# printing the values ` `print``(``"original array- "``, arr) ` `print``(``"assigned array- "``, nc) `

Output:

```id of arr 26558736
id of nc 26558736
original array-  [12  4  6  8 10]
assigned array-  [12  4  6  8 10]
```

## How to check if the Array is a View or a Copy

As we know, copy owns the data and view does not own the data.

You can use the base attribute of ndarray to tell if the array is a copy or a view.  The base attribute returns None for a copy and returns the original array for a view.

You can also use the base attribute to tell if the array owns the data.

## python3

 `import` `numpy as np ` ` `  `# creating array ` `arr ``=` `np.array([``2``, ``4``, ``6``, ``8``, ``10``]) ` ` `  `# creating copy of array ` `c ``=` `arr.copy() ` ` `  `# creating view of array ` `v ``=` `arr.view() ` ` `  `# printing base attribute of copy and view ` `print``(c.base) ` `print``(v.base) `

Output:

```None
[ 2  4  6  8 10]
```

From the above code we can see that object ‘c’ returned None meaning it is a copy and owns the data.

Object ‘v’ returns the original array meaning it is a view and does not own the data.

## Conclusion

View and copy are two different ways of working with NumPy ndarray in Python. View provides a window into existing data without duplicating it but copy creates an independent copy of the array.

In this tutorial, we have covered view and copy in the NumPy array. We have also discussed the difference between copy and view. Both these methods are useful in different situations, carefully use either of them.

Previous
Next