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

Assigning elements to one array in a list of dictionaries

我有一个字典列表。每个字典都包含一个 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 和 returns

中的每个字典
[{'temp': 78, 'nums': array([[44,  2],[ 3,  4]])},
 {'temp': 61, 'nums': array([[44,  2],[ 3,  4]])}]

我原以为只有第一个词典被更改,但列表 (BF) 中的所有词典都被更改了。

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

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