Каков более быстрый способ глубокого копирования вложенного списка без использования .deepcopy()?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Каков более быстрый способ глубокого копирования вложенного списка без использования .deepcopy()?

Сообщение Anonymous »

У меня есть две переменные со следующей структурой:

Код: Выделить всё

# initialization
O1 = [[] for g in range(n)]
for i in range(n):
O1[i] = [[] for g in range(m)]

O2 = [[] for g in range(n)]
for i in range(n):
O2[i] = [[] for g in range(m)]
Затем я ввожу эти два значения в исходную функцию, где к ним добавляются разные значения как:

Код: Выделить всё

for i in range(n):
for j in range(m):
O1[i][j].append([s, as, pat, 0])
O2[i][j].append([[ol, oa, os, ot],[dl, da, ds],tpat, tp, 0])
Как видите, внутренняя структура списков усложняется, особенно в случае с O2. После присвоения значений O1 и O2 они вводятся в несколько других функций. Каждая функция должна создать глубокую копию O1 и O2 и изменить копию для собственного использования, не изменяя исходные переменные O1 и O2. Изменения включают в себя как .remove(), так и .append(), а также +/- значений во внутренних списках. Важно то, что независимо от изменений исходные O1 и O2 вообще не должны меняться. Этот процесс выполняется итеративно, где сначала O1 и O2 присваиваются новые значения, а затем вводятся в несколько других функций, копируются и редактируются без каких-либо изменений в исходных O1 и O2, которые использовались в качестве входных данных.
Использование .deepcopy() является Единственный известный мне способ, но поскольку это итеративный процесс, функция .deepcopy() значительно замедляет код, особенно когда O1 и O2 большие. Я пробовал использовать кортежи в качестве неизменяемой структуры данных, но, учитывая исходную и внутреннюю структуру, а также изменения, внесенные в функции, это не работает. использование кортежей предотвращает изменения в методах Append() и Remove(), но не в операциях +/-.
Я был бы признателен, если бы кто-нибудь предложил более быстрый способ сделать это.

Подробнее здесь: https://stackoverflow.com/questions/790 ... g-deepcopy
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»