An Immutable object, in the lime light of object-oriented and functional programming, is an object whose state cannot be modified after it is created.
Objects of built-in types like (
int,float,bool,str,tuple,unicode) are immutable,
A Mutable object, can be mutated or state can be modified after it is created. A mutable object will have at least a single method able to mutate the object.
Objects of built-in types like (
list,set,dict) are mutable, Custom classes are generally mutable. To simulate immutability in a class, one should override attribute setting and deletion to raise exceptions:
Please refer “names concept” in python, if you don’t have a clear concept onobjects,identifier, `variables.
A practical example to findout the mutablity of object types
x = 10
x = y
We are creating an object of type int. identifiers x and y points to the same object.
id(x) == id(y)
id(y) == id(10)
if we do a simple operation.
x = x + 1
Now
id(x) != id(y)
id(x) != id(10)
The object in which x was tagged is changed. object 10 was never modified. Immutable objects doesn’t allow modification after creation
In the case of mutable objects
m = list([1, 2, 3])
n = n
We are creating an object of type list. identifiers m and m tagged to the same list object, which is a collection of 3 immutable int objects.
id(m) == id(n)
Now poping an item from list object does change the object,
m.pop()
object id will not be changed
id(m) == id(n)
m and n will be pointing to the same list object after the modification. the list object will now contain [1, 2]
Unexpected results can be expected if you use mutable objects in
- Function’s default arguments
- Class inheritance
