×

Shallow Copy and Deep Copy in Python

Shallow Copy and Deep Copy in Python

In this section, we will learn about the Shallow Copy and Deep Copy in the Python program. But before going through the topic, we need to understand how the copy works in Python.

Shallow Copy and Deep Copy in Python

Like other programming languages, the assignment operator (=) in Python is used to copy or assign one variable to another. When we use the assignment (=) symbol to assign values, the assignment operator does not copy the actual values of the first variable. Instead, it passes the reference address of the original variable or object assigned by another variable in the program. Therefore we can say it does not create a new data copy for a new object/variable; instead, they provide the same address for copying elements that are referenced by old variables or objects.

Let’s create a program to copy or assign the first variable’s value to another variable in Python.

Copy.py

 first_var = "Welcome to the JavaTpoint."
sec_var = first_var # assign the first_var to the sec_var for referencing the address.
print(" ID/ Address of the first variable is: ",  id(first_var) )
print(" The value of the first variable: " + first_var)
print(" ID/ Referencing address of the second variable is: ", id(sec_var) ) # print the referencing address of the first variable
print(" The value of the Second variable: " + sec_var) 

Output

 ID/ Address of the first variable is:  1970811644864
 The value of the first variable: Welcome to the JavaTpoint.
 ID/ Referencing address of the second variable is:  1970811644864
The value of the Second variable: Welcome to the JavaTpoint.     

In the above example, the same string or Id is referenced by the Second variables. Therefore, we can say that an assignment operator (=) does not create a separate copy for a new variable. Instead, it passes the reference address of the old variable to get the same value in programming.    

Copy Module

Python Copy Module is an inbuilt function that keeps the original values unchanged and performs modification only in copied variables or vice versa. We can perform the copy operation in the following ways:

  1. Deep Copy
  2. Shallow Copy

The Copy Module is used in Shallow Copy and Deep Copy operations of Python. Let’s understand these topics with an example.

What is the Python Deep Copy?

Python Deep Copy is a recursive process for copying the items of the object. It is used to create a copy for a new object that stores or copies references of old objects or variables to access original values. In other words, it creates a separate copy for the new object that recursively adds the copies of items or values presented in the original list. If we made any changes to the copy object, it does not reflect any change in the original objects.

Syntax

copy.deepcopy(x)

A deepcopy(x) function available in the copy module to perform the copy operation. To use the deepcopy() function, we need to import the copy module in the Python program. A deepcopy() function contains an x parameter that holds the reference of the original object.

Shallow Copy and Deep Copy in Python

Let’s create a program to demonstrate the deepcopy() function in Python.

Copydeep.py

 # import the copy module to use the deepcopy() function
import copy
# initialize the elements of List1
lt1 = [4, 5, [1, 7], 8]
# Use deepcopy() function to perform the Deep Copy
lt2 = copy.deepcopy (lt1) # pass the reference of the List1 in deepcopy() function
# Display the original elements of the list 1
print (" Display the original list before using the Deep Copying ")
for i in range (0, len(lt1)):
    print (lt1 [i], end = " ")
print( "\r")
# Display the copied elements in List2
print ("Display the copied elements in List2", lt2)
# Update the List2 index at lt2[2][0] position
lt2[2] [0] = 7
# Display the changes into the list lt2
print (" Display the modification in copied list (lt2) ")
for i in range(0, len (lt1)):
    print (lt2 [i], end = " ")
# ir does not affect the original list
print ("\n Display the original list (lt1) after modification in List2 ")
for i in range (0, len(lt1)):
    print (lt1[i], end = " ") 

Output

 Display the original List before using the Deep Copying
4 5 [1, 7] 8
Display the copied elements in List2 [4, 5, [1, 7], 8]
 Display the modification in copied list (lt2)
4 5 [7, 7] 8
 Display the original list (lt1) after modification in List2
4 5 [1, 7] 8 

In the above program, we use the deepcopy() function to create a separate copy of the original list/ object as lt2. If we made any changes to the copied object (lt2), it does not reflect any modification to the original object (lt1).

Update the nested object using the deepcopy() function

Deepcopy2.py

 import copy
lt1 = [ [5, 5, 5 ], [4, 4, 4], [10, 10, 10] ]
# use deepcopy() function to pass the reference of the lt1 object.
new_lt = copy.deepcopy(lt1)
# display the original elements of the list 1
print (" Display the original list before performing the Deep Copying ")
for i in range (0, len(lt1)):
    print (lt1 [i], end = " ")
print( "\r")
print(" Display the copied elements of the New List", new_lt)
lt1[0][2] = 'AA' # pass the modifying parameter at the location [0][2]
print("Display the updated old list (lt1)", lt1) # print the updated old list
print("Display the copied list (new_lt)", new_lt) # print the new list 

Output

 Display the original list before performing the Deep Copying
[5, 5, 5] [4, 4, 4] [10, 10, 10]
 Display the copied elements of the New List [[5, 5, 5], [4, 4, 4], [10, 10, 10]]
Display the updated old list (lt1) [[5, 5, 'AA'], [4, 4, 4], [10, 10, 10]]
Display the copied list (new_lt) [[5, 5, 5], [4, 4, 4], [10, 10, 10]] 

What is the Shallow Copy in Python?

A Shallow Copy is similar to the Deep Copy for creating the copy of new variables/objects. It contains the same reference address for new objects that pointing the original object’s values. It does not create a separate copy for a new object or copied object in memory. Suppose we made any changes to the copied object; it will reflect the changes on the original object’s values because both variables are pointing to the same address in the computer memory. Hence, we can say it works like the normal copy function in Python. 

Syntax

copy. copy(x)

A copy() function available in the copy module, and to use the Shallow Copy operation, we need to import the copy module in the Python program. A copy() function contains an x parameter that holds the reference of the original object.

Shallow Copy and Deep Copy in Python

Let’s create a program to demonstrate the Shallow Copy in Python.

shallow.py

 # import the copy module to use the copy() function
import copy
# initialize the list 1 elements in Python
lt1 = [4, 5, [1, 7], 8]
# Use copy() function to perform the shallow copy
lt2 = copy.copy (lt1) # pass the list 1 in copy() function
# Display the original elements of the list 1
print (" Display the original lists before performing the Shallow Copying ")
for i in range (0, len(lt1)):
    print (lt1 [i], end = " ")
print("\n Display the copied elements of the list ", lt2)
# update the copied elements at position lt2[2][0]
lt2[2] [0] = 7
# Display the changes into the list lt2
print (" Display the changes in the copied list after using the Shallow Copying ")
for i in range(0, len (lt1)):
    print (lt2 [i], end = " ")
# Display the changes not affected in the original list
print ("\n Display the original elements list (lt1) after changing the copied list's elements (lt2) ")
for i in range (0, len(lt1)):
    print (lt1[i], end = " ") 

Output

 Display the original lists before performing the Shallow Copying
4 5 [1, 7] 8
 Display the copied elements of the list  [4, 5, [1, 7], 8]
 Display the changes in the copied list after using the Shallow Copying
4 5 [7, 7] 8
 Display the original elements list (lt1) after changing the copied list's elements (lt2)
4 5 [7, 7] 8 

In the above program, we use the copy() function to copy the new object/ list as lt2. Now lt2 stores the same content or data that the original object or list lt1 occupies. And when we perform some changes to the copied object lt2, it displays the changes in both the copied and original object of the list because both objects point to the same address in memory.

Add nested object using the copy() function

nestedCopy.py

 # write a program to add [8, 8, 8] items to an old list using the Shallow Copy in Python.
import copy # import the copy module in Python
old_lt = [ [1, 1, 1], [2, 2, 2], [3, 3, 3] ]
print (" Display the old list before adding the new items in list 1", old_lt)
new_lt = copy.copy (old_lt) # use copy() function to copy the reference of the old_lt
print (" Display the copied list ", new_lt)
old_lt.append( [8, 8, 8]) # add the items into the old list
# print the old and new list after adding the items.
print ("Display the old list after adding the elements ", old_lt)
print ("Display the copied list after adding the element into the list 1", new_lt) 

Output

 Display the old list before adding the new items in list 1 [[1, 1, 1], [2, 2, 2], [3, 3, 3]]
Display the copied list  [[1, 1, 1], [2, 2, 2], [3, 3, 3]]
Display the old list after adding the elements  [[1, 1, 1], [2, 2, 2], [3, 3, 3], [8, 8, 8]]
Display the copied list after adding the element into the list 1 [[1, 1, 1], [2, 2, 2], [3, 3, 3]] 

Related Topics

Python data science course

What is meant by Data Science? When processing raw, structured, and unstructured data utilizing various technologies, algorithms, and the scientific method, data science is a detailed study of the enormous quantity...

4 minutes read.

__init__ in python

Every programmer will enclose to object-oriented programming (OOP) these days. As we know, that python is the latest and most modern programming language; python supports to implementation of object-oriented philosophy....

5 minutes read.

Python Data Structures

Python Data Structures: Python is a programming language used worldwide for various fields such as building dynamic websites, artificial intelligence and many more. However, there is data that plays a...

18 minutes read.

Python Glob

Methods for matching files that include particular patterns in accordance with UNIX shell-related expansion rules are referred to as "glob" methods. Similar methods for finding, locating, and searching for all of...

12 minutes read.

Python Program for Linear Search

Introduction We employ specific algorithms to efficiently carry out our responsibilities, such as searching for an element in a given data structure. These algorithms fall under the category of searching algorithms....

4 minutes read.

How to convert integer to float in Python

Python is an Object-Oriented high-level language. Python has an English-like syntax, which is very easy to read and write codes. Python is an interpreted language which means that it uses...

5 minutes read.

Covariance in Python

Covariance is defined as the estimate of the difference of change between two variables or more variables. It defines the changes of two variables together. In Python, The covariance can...

2 minutes read.

Python Control Statements

Control statements are under the roof topic of loops and loops in python are defined as iteratively and repeatedly working on source code. Loop control statements are defined as they...

3 minutes read.

Python issubclass() Function

Python issubclass() Function The issubclass() function in Python returns a boolean value ‘True’ if the given object is a subclass of classinfo, else it returns False. Syntax issubclass(class, classinfo) Parameter class: It is a required parameter which represents a tuple...

1 minute read.

Python vars() Function

Python vars() Function The vars() function in Python returns the __dict__ attribute for a module, class, instance, or any other object with a __dict__ attribute. Syntax vars([object]) Parameter object: This parameter represents any object with a __dict__attribute Return This function returns...

1 minute read.

Python String count() method

Python String count() method The string.count() method returns the number of times a specified value appears in the string. Syntax string.count(sub[, start[, end]]) Parameter sub: This parameter represents a substring to be searched. start: This parameter...

1 minute read.

Python Knapsack problem

Python Knapsack problem Before we dig down about Knapsack problems in Python, first let's have a look at what is actually a knapsack problem. What is a knapsack problem? A problem from the...

5 minutes read.

Anonymous/Lambda Function in Python

Lambda keyword is used to declare an Anonymous function, i.e. a function that does not have any name. It is also called Anonymous functions. In python, normal functions are defined...

3 minutes read.

What is a Script in Python

Have you ever heard that Python is a scripting language? Or when people address a Python program file as a script? Besides programming, script generally means "a written story for...

3 minutes read.

How to handle exceptions in python

Prerequisite: Exceptions and errors in Python What are Exceptions? Exceptions are run-time errors that unexpectedly occur and crash a program. When occurred, it alters the flow of the program. These errors are...

9 minutes read.

SKLearn Clustering

These are ml methods thatare responsible for detecting patterns and the similarities within the data.The clustering methods are unsupervised.Here the data is clustered to form groups with the help of...

3 minutes read.

Add Dictionary to Dictionary in Python

Dictionary in python: Python's execution of a data model, known more commonly as an implicit array, is a dictionary. A dictionary is made up of a group of key-value pairs. Each...

4 minutes read.

Python open() function

Python open() function The open() function in Python opens a file and returns a corresponding file object. If the file cannot be opened, an OSError is raised. Syntax open(file, mode='r', buffering=1, encoding=None, errors=None, newline=None, closefd=True, opener=None) Parameter file It represents the path and name of the file mode...

2 minutes read.

Count Number of Keys in Dictionary Python

Dictionary is a particular data type in python. Dictionary stores unique values by taking different keys and their assigned values. Through this article, we will learn about python dictionary count,...

3 minutes read.

Important Difference between Python 2.x and Python 3.x with Example

The comparison between Python 2 and Python 3 is given in the article that follows. Python is a computer language that can perform more tasks than other languages and is...

5 minutes read.