You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中多变量赋值numpy数组后值异常覆盖问题求解

问题:多个变量赋值numpy数组后,最后一次赋值覆盖所有变量值

我尝试给不同变量赋值numpy数组,但最后一次赋值会覆盖所有变量对应位置的值,简化后的代码如下:

import numpy as np 
metric_a = metric_b = metric_c = metric_d= np.zeros(10) 

j = 0
temp_a = 1
temp_b = 2
temp_c = 1
temp_d = 5
          
print('temp_a=', temp_a, '  temp_b=', temp_b, ' temp_c=', temp_c, ' temp_d=', temp_d)   
print('metric_a['+str(j)+']=', metric_a[j], '   metric_b['+str(j)+']=', metric_b[j], '    metric_c['+str(j)+']=',metric_c[j], '   metric_d['+str(j)+']=',metric_d[j])
print('j:',j, '\n')

metric_a[j] = temp_a 
metric_b[j] = temp_b
metric_c[j] = temp_c
metric_d[j] = temp_d

print('temp_a=', temp_a, '     temp_b=', temp_b, '     temp_c=', temp_c, '     temp_d=', temp_d)   
print('metric_a['+str(j)+']=', metric_a[j], '   metric_b['+str(j)+']=', metric_b[j], '    metric_c['+str(j)+']=',metric_c[j], '   metric_d['+str(j)+']=',metric_d[j])

实际输出:

temp_a= 1   temp_b= 2  temp_c= 1  temp_d= 5
metric_a[0]= 0.0    metric_b[0]= 0.0     metric_c[0]= 0.0    metric_d[0]= 0.0
j: 0 

temp_a= 1      temp_b= 2      temp_c= 1      temp_d= 5
metric_a[0]= 5.0    metric_b[0]= 5.0     metric_c[0]= 5.0    metric_d[0]= 5.0

期望输出:

metric_a[0]= 1.0    metric_b[0]= 2.0     metric_c[0]= 1.0    metric_d[0]= 5.0

原因与解决方法

原因分析

你用metric_a = metric_b = metric_c = metric_d= np.zeros(10)这种链式赋值时,并没有创建四个独立的numpy数组。实际上这四个变量都指向同一个数组对象——numpy数组属于可变对象,所有变量共享同一块内存空间的数组数据。所以不管你通过哪个变量修改数组元素,所有变量都会同步看到修改后的结果,最后一次赋值自然会覆盖掉之前的修改。

解决方法

要让每个变量对应独立的数组,有两种常用方式:

  1. 分别创建数组
    直接逐个调用np.zeros(10)生成独立数组:

    import numpy as np 
    metric_a = np.zeros(10)
    metric_b = np.zeros(10)
    metric_c = np.zeros(10)
    metric_d = np.zeros(10)
    
  2. 使用copy()复制数组
    先创建一个基础数组,再通过copy()方法生成独立副本:

    import numpy as np 
    base_array = np.zeros(10)
    metric_a = base_array.copy()
    metric_b = base_array.copy()
    metric_c = base_array.copy()
    metric_d = base_array.copy()
    

内容的提问来源于stack exchange,提问作者deijany91

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:20:39