Просто посмотрите на разобранный код:
In [1]: def initializer():
...: root = [] # root of the circular doubly linked list
...: root[:] = [root, root, None, None]
...:
In [2]:
In [2]: import dis
In [3]: dis.dis(initializer)
2 0 BUILD_LIST 0
2 STORE_FAST 0 (root)
3 4 LOAD_FAST 0 (root)
6 LOAD_FAST 0 (root)
8 LOAD_CONST 0 (None)
10 LOAD_CONST 0 (None)
12 BUILD_LIST 4
14 LOAD_FAST 0 (root)
16 LOAD_CONST 0 (None)
18 LOAD_CONST 0 (None)
20 BUILD_SLICE 2
22 STORE_SUBSCR
24 LOAD_CONST 0 (None)
26 RETURN_VALUE
Вам нужен STORE_SUBSCR
код операции, который предназначен для реализации следующего:
mplements TOS1[TOS] = TOS2
Что связано сделать документацию на месте операций.И если вам интересно, что такое операции на месте, вот как это определяет документ:
Операции на месте похожи на двоичные операции, в которых они удаляют TOS и TOS1 и возвращают результат обратно.стек, но операция выполняется на месте, когда TOS1 поддерживает его, и результирующее TOS может быть (но не обязательно) оригинальным TOS1.
Это будет проверять, что встроенный документв исходном коде написано:
инициализировать, указав на себя.
По поводу других ваших вопросов:
Есть ли другой синтаксис длядостичь того же результата?
Да, вы можете, как уже упоминалось в другом ответе, очистить и установить элементы списка, используя атрибут list.extend
.Или назначьте элементы один за другим, может быть, lol
Есть ли другой общий случай использования some_list [:] = some_iterable (без ссылки на себя)?
Этоочень расплывчатый вопрос, потому что это то, что есть.Присвоение предметов Инъективным образом, что может быть полезным при замене предметов без воссоздания ссылок и т. Д.