Выделение места для пустого списка в python за время O (1)

У меня есть ситуация, когда у меня есть определенный диапазон ввода, и поэтому я могу полностью индексировать в O (1), создавая список размером с диапазон ввода и индексируя ввод сам по себе. Чтобы быть яснее, у меня по существу следующая ситуация

a = "inputrange"
rng = ord(max(a)) - ord(min(s))
data = [None] * rng

Моя проблема в том, что я не уверен, является ли процесс распределения для data O (1) или нет. Интуитивно должен быть какой-то способ сделать это в O (1), так как в стеке я просто определяю начальную и конечную точки для данных, и поэтому для выделения требуется только время O (1), но python немного удален от этого, поэтому я не могу быть уверен.

Очень важно, что я могу выделить в O (1), так как я создаю дерево суффиксов для входных данных, и поэтому для обеспечения индексации O (1) при обходе дерева мне нужен список размером с алфавит (или хэш-карта , хотя я их избегаю), но поскольку я выделяю по существу каждый суффикс, мне нужно, чтобы выделение было постоянным.

Еще одна идея, которая у меня была, заключалась в том, чтобы создать список шаблонов и скопировать его, но копирование занимает O (n) времени, поэтому это не сработает.

РЕДАКТИРОВАТЬ: это не дубликат временной сложности [var]*n, я четко заявляю, что ищу способ сделать список распределения памяти в O (1). Тот факт, что я использую [var]*n в качестве текущего метода выделения этой памяти, не означает, что на него можно ответить, зная сложность этого метода.

Вопрос по-прежнему остается: Есть ли способ выделить место для пустого списка в python за время O(1).


person Recessive    schedule 21.04.2021    source источник
comment
Распределение должно быть O (1). Он точно знает, насколько большим он должен быть из умножения, поэтому ему не нужно увеличивать его постепенно.   -  person Barmar    schedule 21.04.2021
comment
Обратите внимание, что хотя выделение памяти равно O(1), размещение None в каждом элементе равно O(n).   -  person Barmar    schedule 21.04.2021
comment
Вам действительно нужно перестать думать об объектах Python list как о примитивных массивах C. [None] * rng — операция с линейным временем. Но от этого никуда не деться. В качестве альтернативы рассмотрите numpy и numpy.empty   -  person juanpa.arrivillaga    schedule 21.04.2021
comment
Опять же, невозможно делать то, что вы хотите, со списками Python. Нет концепции выделения памяти, вы создаете объект списка. Если вам нужно, чтобы этот объект списка был определенного размера, он всегда потребует операции O(N), где N — размер этого списка. Обратите внимание, [None]*n не пустой (кроме n ==0), [] – пустой список, [None, None, None] – непустой.   -  person juanpa.arrivillaga    schedule 21.04.2021