Skip to content Skip to sidebar Skip to footer

Python 3 Integer Addresses

x=300 y=300 print(id(x),id(y)) a=[300,300] print(id(a[0]),id(a[1])) On executing above code I get different addresses for x and y but the same address for a[0] and a[1]. Can anyon

Solution 1:

Take a look at below example:

>>>a=256>>>b=256>>>print(id(a),id(b))
(31765012, 31765012)
>>>>>>c=257>>>d=257>>>print(id(c),id(d))
(44492764, 44471284)
>>>

This will help you understand the unexpected behavior for integers. Whenever you create a int in range -5 to 256 you actually just get back a reference to the existing object. This is called Integer Caching in python.

In CPython, the C-API function that handles creating a new int object is PyLong_FromLong(long v). see the documentation on this link

EDIT: Now coming to the list. For the same list elements (larger integers) you are getting same id's because list is created at once or you can say in one go.

You can achieve similar behavior with integers as well, see below example with parallel assignment.

>>>>>>a,b = 300,300>>>>>>print(id(a),id(b))
(36132288, 36132288)
>>>

Hope this will clear your doubts.

Post a Comment for "Python 3 Integer Addresses"