切片范围是否像切片列表一样使用额外的空间?

问题描述 投票:1回答:1

如果我在Python终端中像下面那样分割一个范围,则会返回另一个具有相同范围的表示形式。与列表一样,切片范围会分配额外的空间吗?

>>> range(1,5)[::-1]
range(4, 0, -1)

换句话说,这会创建一个新范围吗?

python memory range slice space
1个回答
0
投票

与常规列表或元组相比,范围类型的优势在于,范围对象将始终占用相同(少量)的内存,无论其表示的范围大小如何(因为它仅存储开始,停止和步进值,根据需要计算各个项目和子范围。]

import sys

print(sys.getsizeof(range(1,5)))

print(sys.getsizeof(range(1,5)[::-1]))

print(sys.getsizeof(list(range(1,5))))

print(sys.getsizeof(list(range(1,5)[::-1])))

print(sys.getsizeof(list(range(1,5))[::-1]))

print(sys.getsizeof([1,2,3,4,5][::-1]))
48
48
120
120
96
104

没有从第一个范围进行复制(因此,如果对range(1,5)range(1,5)[::-1]都应用一次,则空间复杂度是相同的,但是您将获得一个新的范围对象。

range1 = range(1,5)
range2 = range1
range3 = range1[::-1]

print(id(range1))
print(id(range2))
print(id(range3))
140671877466800
140671877466800
140671877466608
© www.soinside.com 2019 - 2024. All rights reserved.