У меня есть фрагмент кода Python, который я пытался оптимизировать, но при этом он фактически замедлился в 4 раза. Я понятия не имею, почему.
def q_iteration(self, n:int):
"""Runs q_iteration on the state grid. raw_grid will not be affected"""
for i in range(n):
# Create structure to edit without affecting old data
new_grid = copy.deepcopy(self.state_grid)
for r in range(len(self.raw_grid)):
for c in range(len(self.raw_grid[r])):
new_grid[r][c].update_v(r, c, self.state_grid)
self.state_grid = new_grid
update_v
- этоТяжелая работа и скорость работы программы становятся очень проблематичными.Я решил, что в дополнение к оптимизации update_v
я изменил ссылки так, чтобы не создавать новую глубокую копию каждую итерацию.
def q_iteration(self, n:int):
"""Runs q_iteration on the state grid. raw_grid will not be affected. Resets any previous iteration"""
# create copy to edit
nxt = copy.deepcopy(self.state_grid)
# create copy to reference data
curr = self.state_grid
# clear the current data
for r in range(len(nxt)):
for c in range(len(curr)):
curr[r][c].v = 0
# update v values
for i in range(n):
for r in range(len(self.raw_grid)):
for c in range(len(self.raw_grid[r])):
nxt[r][c].update_v(r, c, curr)
# swap references to overwrite current next iteration
curr, nxt = nxt, curr
# set the reference back into the data
self.state_grid = curr
Что не имеет для меня никакого смысла, так это почемуне создание глубокой копии на самом деле медленнее ?Может кто-нибудь объяснить это?
Редактировать: вот update_v
https://pastebin.com/cS2T8Z5t