id(object)
Returns unique identity ( integer or long integer ) of the python object.
identity is assigned when object is created.
It is the address of the object's memory
id changes each time the program is run except some objects for which id is fixed.
Using integer
my_int=34
print(id(my_int)) # 10969856
Using list
my_list=[1,2,3]
print(id(my_list)) #139787163392648
Fixed id
These ids will remain same even after re-run of the program.
my_int=-5
print(id(my_int)) # 10968608
my_int=256
print(id(my_int)) # 10976960
my_int=257
Integer from -5 to 256, ids will not change.
Mutable and immutable object and id()
We can see for mutable objects by changing the element the ID will not change , whereas for immutable objects id will change.
More on Mutable & Immutable objects
List is a mutable object but tuple is a immutable object. Check how the identities are changing after adding elements.
Using tuple
my_tuple=(5,7,5,4,3,5)
print(id(my_tuple)) # 139787173397704
my_tuple +=(9,8)
print(id(my_tuple)) # 139787174601112
print(my_tuple) #(5, 7, 5, 4, 3, 5, 9, 8)
Using List
my_list=[5,7,5,4,3,5]
print(id(my_list)) # 139787163608584
my_list +=[9,8]
print(id(my_list)) # 139787163608584
print(my_list) # [5, 7, 5, 4, 3, 5, 9, 8]
Two non-overlapping lifetime objects may have the same identity or id() vlaue.
Comparing list( Mutable ) with string ( immutable )
When we assign a different value to a string variable we are not modifying the string object, we are creating a new string object.
But when we change any element of a list we are not creating a different object, we are only modifying the same object.
my_list=[1,2,3]
str='welcome'
print("address of list : ", id(my_list))
print("address of string str : ",id(str))
# change the values
# modified the list object, not a new object , address is same.
my_list[1]=7
print("address of list : ", id(my_list))
# str[1]='p' # this will generate error
# new string object is created now,
# not modified the old one, address changed
str='Python'
print("address of string str : ", id(str))
Output
address of list : 140301581527624
address of string str : 140301582741432
address of list : 140301581527624
address of string str : 140302155689016
« variables
Iterator
any()
is() & not is() »