Новый массив создан на основе старого массива, идентификаторы отличаются, но изменение нового массива изменяет старый массив (python) - PullRequest
0 голосов
/ 06 января 2020

Добрый день!

Ниже приведен мой фрагмент кода:

density_new = density_old[:,:,40:55]

for i in range(0,16):
    density_new[:,:,i] = 1020

Теперь, это должно измениться только плотность_Новости, потому что, как мы выделяем Плотность_Нью, у него есть свой собственный идентификатор памяти (Я дважды проверил, используя python команду id () для обеих переменных). Проблема заключается в том, что когда я запускаю код, он меняет оба параметра density_old и density_new, и поскольку у них разные идентификаторы, я не знаю, почему это происходит. Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Другое решение:

import copy

density_new = copy.deepcopy(density_old[:,:,40:55])

С https://docs.python.org/2/library/copy.html:

Глубокая копия создает новый составной объект, а затем рекурсивно вставляет копии в него из предметов, найденных в оригинале.

0 голосов
/ 06 января 2020

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

, просто попробуйте это:

density_new = list(density_old[:,:,40:55])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...