Python中切片返回的列表的Id
我读到列表切片返回一个包含原始列表内容的新列表。 在运行下面的代码时,为什么我看到切片返回的所有列表都有相同的id。有人能解释一下这里发生了什么吗Python中切片返回的列表的Id,python,Python,我读到列表切片返回一个包含原始列表内容的新列表。 在运行下面的代码时,为什么我看到切片返回的所有列表都有相同的id。有人能解释一下这里发生了什么吗 list_4 = [0, 1, 2, 3, 4, 5] print(id(list_4)) print(id(list_4[0:1])) print(id(list_4[0:2])) print(id(list_4[-1:])) 输出: 2812068811464 2812100759880 2812100759880 2812100759880
list_4 = [0, 1, 2, 3, 4, 5]
print(id(list_4))
print(id(list_4[0:1]))
print(id(list_4[0:2]))
print(id(list_4[-1:]))
输出:
2812068811464
2812100759880
2812100759880
2812100759880
您的切片在下一条语句之前被删除,因此新切片具有相同的
id
。如果保留切片,则id
永远不会相同:
>>> print(id(list_4[0:1]))
139887348117232
>>> print(id(list_4[0:2]))
139887348117232
>>> print(id(list_4[-1:]))
139887348117232
>>> b = list_4[0:1]
>>> c = list_4[0:2]
>>> id(b)
139887348117232
>>> id(c)
139887348207200
>>>
因为
id
只保证对象生命周期内的唯一数字。在这里的每种情况下,新列表都会立即被回收(CPython实现细节),私有堆可以自由地重新使用该内存来分配新列表(同样,CPython实现细节)