Присвоение элементов одному массиву в списке словарей - PullRequest
1 голос
/ 06 апреля 2019

У меня есть список словарей. Каждый словарь содержит np.array в качестве одного из значений, связанных с ключом. Я пытаюсь изменить значения в определенном массиве только одного из словарей в списке и обнаруживаю, что каждый словарь в списке изменяется.

tmp_array = np.array([[1,2],[3,4]])
BF = [{ 'temp':78, 'nums':tmp_array},{'tmp':61,'nums':temp_array}]
BF[0]['nums'][0,0] = 44

Это переназначает каждый словарь в списке BF и возвращает

[{'temp': 78, 'nums': array([[44,  2],[ 3,  4]])},
 {'temp': 61, 'nums': array([[44,  2],[ 3,  4]])}]

Я ожидал, что будет изменен только первый словарь, но все словари в списке (BF) были изменены.

Есть ли способ назначить изменение значений только одного из словарей? (Я знаю, что могу назначить новое значение в словаре, но оно не работает, если значения в массиве)

1 Ответ

0 голосов
/ 06 апреля 2019

Массивы NumPy являются изменяемыми объектами, и вы используете один и тот же объект в разных словарях.Так как это один и тот же объект, изменение его где-либо изменит его повсюду.

Одним исправлением будет создание копии для каждого нового словаря:

tmp_array = np.array([[1,2],[3,4]])
BF = [{ 'temp':78, 'nums':tmp_array.copy()},{'tmp':61,'nums':tmp_array.copy()}]
BF[0]['nums'][0,0] = 44
...