Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why two individually created immutable objects have same id and mutable objects have different while both refer to same values? [duplicate]

Two individually created mutable list have different ids.

Python SHELL: (mutable)

>>> mylist = ['spam', 'eggs']
>>> yourlist = ['spam', 'eggs']
>>> id(mylist), id(yourlist)
(49624456, 48910408)

While two individually created immutable strings have similar ids.

Python SHELL: (immutable)

>>> a = 10
>>> b = 10
>>> id(a), id(b)
(507099072, 507099072)

Is a and b referencing to a same object? If no, why ids are similar? Is mylist and yourlist referencing to different objects? If yes, why they have different ids.

like image 504
Yousuf Memon Avatar asked Jan 13 '14 12:01

Yousuf Memon


1 Answers

Python caches some small strings and numbers: http://docs.python.org/2/c-api/int.html#PyInt_FromLong

The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you actually just get back a reference to the existing object.

And id(some_list) always gives you the address of container - list object in memory, not strings in list!

like image 61
ndpu Avatar answered Sep 29 '22 18:09

ndpu