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

时间:2014-01-13 12:40:13

标签: python immutability identifier concept mutability

两个单独创建的可变列表具有不同的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)

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

1 个答案:

答案 0 :(得分:3)

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

  

当前实现为所有实体保留了一个整数对象数组   -5到256之间的整数,当你在该范围内创建一个int时   实际上只是返回对现有对象的引用。

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