Ответ 1
Assignment slipt списка CPython сначала преобразует итерабельность в список, вызывая PySequence_Fast
. Источник: https://hg.python.org/cpython/file/7556df35b913/Objects/listobject.c#l611
v_as_SF = PySequence_Fast(v, "can only assign an iterable");
Даже PyPy делает что-то похожее:
def setslice__List_ANY_ANY_ANY(space, w_list, w_start, w_stop, w_iterable):
length = w_list.length()
start, stop = normalize_simple_slice(space, length, w_start, w_stop)
sequence_w = space.listview(w_iterable)
w_other = W_ListObject(space, sequence_w)
w_list.setslice(start, 1, stop-start, w_other)
Здесь space.listview
вызывается ObjSpace.unpackiterable
для распаковки итерации, которая, в свою очередь, возвращает список.