为什么两个单独创建的不可变对象具有相同的id,而可变对象具有不同的id,同时都引用相同的值



两个单独创建的可变列表具有不同的id。

Python外壳:(可变)

>>> 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)

ab是否引用了同一个对象?如果没有,为什么id相似?mylistyourlist是否引用了不同的对象?如果是,为什么他们有不同的id。

Python缓存一些小字符串和数字:http://docs.python.org/2/c-api/int.html#PyInt_FromLong

当前实现为所有介于-5和256之间的整数,当您在该范围内创建一个int时实际上只是获取对现有对象的引用。

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

最新更新