Хорошо, позвольте мне объяснить проблему на простом примере:
l = [[0]]*3 # makes the array [[0], [0], [0]]
l[0][0] = 42 # l becomes [[42], [42], [42]]
from copy import deepcopy
m = deepcopy(l) # m becomes [[42], [42], [42]]
m[0][0] = 2 # m becomes [[2], [2], [2]]
Это основная проблема с общими ссылками. За исключением случаев, когда обычно возникает такая проблема, deepcopy
- наш друг. В настоящее время я сделал это, чтобы решить мою deepcopy
предательства в deepcopy
:
l = [[0]]*3 # makes the array [[0], [0], [0]]
import JSON
m = JSON.loads(JSON.dumps(l)) # m becomes [[0], [0], [0]] with no self references
Я ищу менее неэффективный и менее глупый способ обработки собственных ссылок.
Конечно, я бы не создавал подобные массивы специально, но мне нужно разобраться со случаем, когда кто-то дает его моему коду. Выполнение моего "решения" на больших массивах происходит медленно, и у меня есть много уровней вложенных массивов, я не могу позволить себе сделать строку такой большой для этих зверей.