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"