我有一个字典清单。每个字典都包含一个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)中的所有词典都已更改。
是否有一种方法可以分配仅一个词典的值? (我知道我可以为字典分配一个新值,但是如果这些值是数组,它似乎不起作用)
答案 0 :(得分: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