循环 'for element in list_[a:b]' 是否使用解释器优化的未使用副本?

Is loop 'for element in list_[a:b]' using unused copy optimized by interpreters?

这是:

for element in list_[a:b]:

在解释 (CPython) 期间翻译为等同于:

for i in range(a, b):
    element = list_[i]

或者是复制

list_[a:b]

真的表演了?

真的复制了。解释器无法知道运行时对象 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