Array Copying in Python

Let us see how to copy arrays in Python. There are 3 ways to copy arrays :

  • Simply using the assignment operator.
  • Shallow Copy
  • Deep Copy

Assigning the Array

We can create a copy of an array by using the assignment operator (=).

Syntax :

new_arr = old_ arr

In Python, Assignment statements do not copy objects, they create bindings between a target and an object. When we use = operator user thinks that this creates a new object; well, it doesn’t. It only creates a new variable that shares the reference of the original object.

Example :



filter_none

edit
close

play_arrow

link
brightness_4
code

# importing the module
from numpy import *                   
  
# creating the first array
arr1 = array([2, 6, 9, 4])             
  
# displaying the identity of arr1
print(id(arr1))
  
# assigning arr1 to arr2
arr2 = arr1                          
  
# displaying the identity of arr2
print(id(arr2))
  
# making a change in arr1
arr1[1] = 7                         
  
# displayin the arrays
print(arr1)
print(arr2)

chevron_right


Output :

117854800
117854800
[2 7 9 4]
[2 7 9 4]

We can see that both the arrays reference to the same object.

Shallow Copy

A shallow copy means constructing a new collection object and then populating it with references to the child objects found in the original. The copying process does not recurse and therefore won’t create copies of the child objects themselves. In the case of shallow copy, a reference of the object is copied in other object. It means that any changes made to a copy of the object do reflect in the original object. We will be implementing shallow copy using the view() function.

Example :

filter_none

edit
close

play_arrow

link
brightness_4
code

# importing the module
from numpy import *                  
   
# creating the first array
arr1 = array([2, 6, 9, 4])
  
# displaying the identity of arr1
print(id(arr1))
  
# shallow copy arr1 in arr2 using view()
arr2 = arr1.view()  
  
# displaying the identity of arr2
print(id(arr2))
   
# making a change in arr1
arr1[1] = 7                        
   
# displayin the arrays
print(arr1)
print(arr2)

chevron_right


This time although the 2 arrays reference different objects, but still on changing the value of one, the value of another also changes.

Deep Copy

Deep copy is a process in which the copying process occurs recursively. It means first constructing a new collection object and then recursively populating it with copies of the child objects found in the original. In case of deep copy, a copy of object is copied in other object. It means that any changes made to a copy of object do not reflect in the original object. We will be implementing deep copy using the copy() function.

filter_none

edit
close

play_arrow

link
brightness_4
code

# importing the module
from numpy import *                  
   
# creating the first array
arr1 = array([2, 6, 9, 4])
  
# displaying the identity of arr1
print(id(arr1))
  
# shallow copy arr1 in arr2 using view()
arr2 = arr1.copy() 
  
# displaying the identity of arr2
print(id(arr2))
   
# making a change in arr1
arr1[1] = 7                        
   
# displayin the arrays
print(arr1)
print(arr2)

chevron_right


Output :

121258976
125714048
[2 7 9 4]
[2 6 9 4]

This time the changes made in one array is not reflected in the another array.

Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :

5


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.