将元素分配给字典列表中的一个数组

问题描述 投票:1回答:1

我有一个词典列表。每个字典都包含一个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)都已更改。

有没有办法分配更改只有一个词典的值? (我知道我可以为字典分配一个新值,但如果一个数组的值,它似乎不起作用)

python dictionary numpy-ndarray
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.