×

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 list() | List class in Python

The list() class in Python creates a list object where the list object is a collection which is ordered and changeable. Syntax class list([iterable]) Parameter Iterable: It is a required parameter which represents a sequence, collection...

1 minute read.

Calculator Program in Python

Simple Calculator Program in Python This example helps to learn how to create a simple calculator program to perform operations like addition, subtraction, multiplication, and division. Source Code The following is the source...

2 minutes read.

Python abs() function

Python abs() function The abs() function returns the absolute value of a number. Syntax abs(x) Parameter x: The parameter ‘x’ can be an integer value, a floating point number or a complex number. Return This function returns...

1 minute read.

Python Compiler

What is Compiler? The compiler is mainly a program used to convert the source code into the machine or binary code. The source code is generally a computer program written using...

6 minutes read.

Python List copy() method

Python List copy () method The list.copy () method returns a shallow copy of the list. Syntax list.copy() Parameter NA Return This function returns the copy for the given list. Example 1 # Python program explaining # the list.copy() method # passing the...

1 minute read.

Python Call Function

In this article, you will learn about calling a function in Python. But before learning this, we should know about functions in Python.So, let’s get some overview of functions in...

6 minutes read.

Python try catch exception

The try-except proclamation can deal with exceptions. Exceptions might happen when you run a program. Exceptions are blunders that occur during the execution of the program. Python won't educate you regarding...

3 minutes read.

Python PyMOTW

The cmd module comprises one class of the general public, Cmd, meant for command processors such interactive shells and other command interpreters as a foundation class. It utilises readline as...

3 minutes read.

Python OOPs: Class, Object, Inheritance and Constructor

Basic Object-Oriented Programming (OOP) Concepts in Python Python is similar to most general-purpose programming languages with an Object-Oriented environment system since its existence. Being an Object-Oriented Programming language, Python provides ease...

9 minutes read.

Why learn Python?

All things considered, learning python would be extraordinary, it'll acquaint you with the universe of dynamic programming dialects, if you're somebody who has had a semester of involvement with C. Python...

4 minutes read.

Tuple in Python

Tuples Tuples are the same as the list but as we know that lists are mutable means we can change the data from it. In the tuple we cannot change the...

6 minutes read.

List Comprehension in Python

Sometimes we need new lists that are completely based on previously existing lists, so to perform this operation successfully, some of the programming languages come with a syntactic construct known...

5 minutes read.

Python Loop through a Dictionary

Introduction in this tutorial, we will discuss in python How to Loop Through a Dictionary. In contrast to other Data Types, which can only retain a single value as an element, a Dictionary...

4 minutes read.

Python String rjust() method

Python String rjust() method The string.rjust() method in Python returns a right-justified string of a given minimum width where the padding is done using the specified fillchar (default is a space). It returns...

2 minutes read.

Convert XML to JSON in Python

XML conversion is very useful if we work on an API that returns data in JSON format and the source of data is in XML format. JSON A JSON file reserves the...

4 minutes read.

Python Variables, Constants and Literals

Python is today's most valuable, easy-to-implement and sought-out programming language. Nowadays, developers want to focus on implementing the program rather than spending time with complex programs. So, for this reason,...

17 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.

Crash Course on Python by Google

There is a new, free Python programming course offered by Google on Coursera. No programming experience is necessary. There are numerous Python courses available, but when you learn that Google is...

5 minutes read.

Difference between Expression and Statement in Python

What is an expression in Python? Expression is a combination of operands and operators. Expression helps us to produce some other values. In the python programming language,  expressions produce some other value...

6 minutes read.

Python String upper() method

Python String upper() method The string.upper() method in Python returns a copy of the string converted to uppercase. Syntax string.upper() Parameter NA Return This method returns a copy of the string converted to uppercase. Example 1 # Python...

1 minute read.