编程语言
首页 > 编程语言> > python-为什么两个单独创建的不可变对象具有相同的id,而可变对象却具有不同的含义,而它们都引用相同的值?

python-为什么两个单独创建的不可变对象具有相同的id,而可变对象却具有不同的含义,而它们都引用相同的值?

作者:互联网

这个问题已经在这里有了答案:            >            What’s with the Integer Cache inside Python?                                    1个
两个单独创建的可变列表具有不同的ID.

Python SHELL :(可变)

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

虽然两个单独创建的不可变字符串具有相似的ID.

Python SHELL :(不可变)

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

a和b引用相同的对象吗?如果没有,为什么ID相似?
mylist和yourlist是否引用不同的对象?如果是,为什么它们具有不同的ID.

解决方法:

Python会缓存一些小的字符串和数字: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.

而且id(some_list)始终为您提供容器的地址-内存中的列表对象,而不是列表中的字符串!

标签:concept,immutability,mutability,identifier,python
来源: https://codeday.me/bug/20191122/2058306.html