Open In App

Pass by reference vs value in Python

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Developers jumping into Python programming from other languages like C++ and Java are often confused by the process of passing arguments in Python. The object-centric data model and its treatment of assignment are the causes of the confusion at the fundamental level.

In the article, we will be discussing the concept of how to pass a value by reference in Python and try to understand pass-by-reference examples in Python.

Pass by Value and Pass by Reference in Python

You might want to punch something after reading ahead, so brace yourself. Python’s argument-passing model is neither “Pass by Value” nor “Pass by Reference” but it is “Pass by Object Reference”. 

Depending on the type of object you pass in the function, the function behaves differently. Immutable objects show “pass by value” whereas mutable objects show “pass by reference”.

You can check the difference between pass-by-value and pass-by-reference in the example below:

Python3




def call_by_value(x):
    x = x * 2
    print("in function value updated to", x)
    return
  
def call_by_reference(list):
    list.append("D")
    print("in function list updated to", list)
    return
  
my_list = ["E"]
num = 6
print("number before=", num)
call_by_value(num)
print("after function num value=", num)
print("list before",my_list)
call_by_reference(my_list)
print("after function list is ",my_list)


Output

number before= 6
in function value updated to 12
after function num value= 6
list before ['E']
in function list updated to ['E', 'D']
after function list is ['E', 'D']

In the above code, we have shown how Python uses call by reference object concept in its program.

We pass an integer in function call_by_value(). Integers are immutable objects hence Python works according to call by value, and the changes made in the function are not reflected outside the function.

We then pass list to function by reference. In function call_by_reference() we pass a list that is an mutable object. Python works according to call by reference in this function and the changes made inside the function can also be seen outside the function.

The variable is not the object

Here “a” is a variable that points to a list containing the elements “X” and “Y”. But “a” itself is not a list. Consider “a” to be a bucket that contains the object “X” and “Y”. 

 a = ["X", "Y"]

What is Pass by Reference In Python?

Pass by reference means that you have to pass the function (reference) to a variable, which means that the variable already exists in memory. 

Here, the variable( the bucket) is passed into the function directly. The variable acts as a package that comes with its contents (the objects).

In the above code image, both “list” and “my_list” are the same container variable and therefore refer to the same object in the memory. Any operation performed by the function on the variable or the object will be directly reflected by the function caller. For instance, the function could completely change the variable’s content, and point it at a completely different object: 

Also, the function can reassign the contents of the variable with the same effect as below:

To summarize, in pass-by-reference, the function and the caller use the same variable and object.

Pass by Reference In Python Example

In this example, the function modify_list takes a list by reference. The function adds the string “Geeks” to the passed list inside the function and prints it. Since lists are mutable data types, the changes made to the list inside the function are also reflected outside the function as you can see in the output.

Python3




def modify_list(x):
    x.append("Geeks")
    print("Inside function:", x)
  
my_list = ['Geeks', 'for']
modify_list(my_list)
print("Outside function:", my_list)


Output

Inside function: ['Geeks', 'for', 'Geeks']
Outside function: ['Geeks', 'for', 'Geeks']

What is Pass by Value In Python?

In this approach, we pass a copy of the actual variables in the function as a parameter. Hence any modification on parameters inside the function will not reflect in the actual variable.

The same is true for any operation performed by the function on the variable or the object 

To summarize, the copies of the variables and the objects in the context of the caller of the function are completely isolated.

Pass by Value In Python Example

Here, we will pass the integer x to the function which is an immutable data type. We then update the value of the integer inside the function and print the updated value. The changes are not seen outside the function as integers are immutable data types.

Python3




def modify_integer(x):
    x = x + 10  
    print("Inside function:", x)
  
x = 5
print("Before function call:", x)
modify_integer(x)
print("After function call:", x)  


Output:

Before function call: 5
Inside function: 15
After function call: 5

Python programming uses “pass by reference object” concept while passing values to the functions. This article tries to show you the concept of pass by value and pass by reference in Python. We have shown different cases of passing values with examples. Passing values to a function in Python is different from other coding languages, but with this tutorial, you can easily understand the concept and implement it in your work.

Also Read:

Is Python call by reference or call by value



Last Updated : 14 Mar, 2024
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads