问题
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.
回答1:
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!
来源:https://stackoverflow.com/questions/21091568/why-two-individually-created-immutable-objects-have-same-id-and-mutable-objects