In this article, you will learn about python mutable vs. non-mutable date type and how they affect passing of arguments to the function.
In the previous article, you learned about passing arguments by reference and passing arguments using values. The choice of passing arguments depends on the data type.
Mutability is the ability of variable to change its value after being declared. A
mutable variable can change its value after being declared. The data type of mutable give this ability.
immutable variable is that which cannot change its value after being declared. The data type of such variable does permit mutability. Python
basic data types are mostly immutable types.
A variable declaration is the process of assigning a value to the variable. This process reserves a memory location for the variable to store its data.
myInt = 44 print(id(myInt)) myList = ["Apple","Orange","Grapes"] print(id(myList))
The code above will create two memory location and store its values. The first value is an integer and second one is a list type.
The program uses
id() function to display the memory addresses of the variables. Output is given below.
Now, if we try to change the value of integer which is a mutable variable because of integer type. It won’t update the existing variable, but create a new variable at a new memory location.
myInt = 44 print("Before: ",id(myInt)) myInt = myInt + 10 print("After: ",id(myInt))
The result of
myInt = myInt + 10 is stored in new location. Here is the output.
Before: 140713857296112 After: 140713857296432
This is because integer is
Python Immutable Type
Consider same example with a string.
myString = "mycar" print(myString) print("Before: ",id(myString)) print(myString.upper()) print("After: ",id(myString))
In the example above, the program changes the original text lowercase letters to uppercase letters using python
After changing the string to uppercase, it does not change the value or memory address of the original text.This is because python string type is also
immutable. Here is the output.
mycar Before: 321865256432 MYCAR After: 321865256432
Immutable Type with Function
An immutable variable when passed as parameter will act list it is passed by value because it will not change the original value passed variable.
Python Mutable Type
There are newer data types in python that allows to change the original variable data.
myList = ["Apple","Orange","Grapes"] print(id(myList))
The above is a list data type which is
mutable. That means you can change it without re-declaring it in a new location.
myList = ["Apple","Orange","Grapes"] # printing the memory address of the list print(myList) print(id(myList)) # adding banana to the list myList.append("Banana") # print the memory address of the updated list print(myList) print(id(myList))
Once we run the program, the program adds a new item to the list. We also print the original list with the updated list.
Here output is given below.
['Apple', 'Orange', 'Grapes'] 321864522760 ['Apple', 'Orange', 'Grapes', 'Banana'] 321864522760
The list is updated and the new item appears in the list. However, you note that the memory address of the
myList has not changed. That is because the list data type is
Mutable Variable and Function
A mutable variable when passed as parameter to the function will compute and change the original value of the variable. It works similar to passing by reference to a function.
Whenever we re-declare a mutable variable, it will be created in a new location. However, immutable variable is value based, therefore, when you create a new variable and assign it some value. If the value is already available in the memory. Python assign that value to new variable.
myInt has a value of 23 stored at 74384844. If you re-declare
myInt than it is going to point to same memory location 74384844 where 23 is available.
See the example below.
print("Before") myInt = 23 myStr = "Hello" myList = [1, 3 , 6, 9] print(id(myInt)) print(id(myStr)) print(id(myList)) # re-declare the variable with same value print("After") myInt = 23 myStr = "Hello" myList = [1, 3 , 6, 9] print(id(myInt)) print(id(myStr)) print(id(myList))
The output of the program is given below.
Before 140713857295440 321852102896 321864540808 After 140713857295440 321852102896 321852148936
The value of
immutable type is does not change memory location because it is assigning the available value
23 and “
Hello” in the memory. The value of mutable variable
myList changes due to re-declaration.