Копия действительно выполнена. Интерпретатор не может знать, что это за объект list_
во время выполнения и что вы будете с ним делать (возможно, вы начнете редактировать оригинал list_
).
Если вы не хотите производить копию, используйте itertools.islice
:
import itertools
def f(list_, a, b):
for element in itertools.islice(list_, a, b):
element
Вы можете посмотреть документацию islice
, которую я связал, для полной (переведенной на Python) реализации, но это упрощенная версия:
def islice(itr, start, stop):
for index, element in enumerate(itr):
if index == stop:
break
if start <= index:
yield element