Преимущество типа диапазона перед обычным списком или кортежем состоит в том, что объект диапазона всегда будет занимать один и тот же (маленький) объем памяти, независимо от размера диапазона, который он представляет (так как он хранит только значения начала, остановки и шага, при необходимости вычисляя отдельные элементы и поддиапазоны).
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][::-1]))
48
48
120
120
96
96
Никакая копия не сделана из первого диапазона (поэтому сложность пространства одинакова, если применить один раз для 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