在python中,我的数组值自行改变,为什么?

时间:2018-06-13 15:02:30

标签: python

print(ys)
for i in range(counter):
    if(ys[i]<yzero[i]):
        dupys[i]=yzero[i]
#plt.plot(xs,dupys) #this is used for checking on the levelline graph
print(ys)

我尝试了许多不同的方法来测试它,但似乎它无缘无故地改变了,从代码中,我们可以看到我只更改了dupys列表。

  

输出:

     
    

[ - 1.401109325007359,-1.4012097591798365,-1.4013107885799283,-1.4013711090958765,-1.4013991265977308,...]

         

[ - 1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,-1.4,...]

  

1 个答案:

答案 0 :(得分:0)

即使代码的一部分缺失,我想你面临以下问题:

JSESSIONID

如您所见,即使您正在修改新列表中的值,也会修改旧列表中的值 要解决此问题,您应该为新列表分配旧副本的副本:

dear_old_value = ["rusty_value0", "rusty_value1", "rusty_value2", "rusty_value3"]

new_values = dear_old_value

new_values[0] = "shiny_value0"
new_values[2] = "shiny_value2"

print dear_old_value # OUTPUT: ['shiny_value0', 'rusty_value1', 'shiny_value2', 'rusty_value3']

在Python中,您应该将变量名称视为对象的标记 在我们的示例中,我们没有将dear_old_value = ["rusty_value0", "rusty_value1", "rusty_value2", "rusty_value3"] new_values = list(dear_old_value) new_values[0] = "shiny_value0" new_values[2] = "shiny_value2" print dear_old_value # OUTPUT: ['rusty_value0', 'rusty_value1', 'rusty_value2', 'rusty_value3'] 中包含的值分配给dear_old_values,我们只是说new_values引用的对象现在也会被dear_old_values引用。<登记/> 您可以检查对象的ID以确认:

new_values

为了避免这种情况,我们将变量(dear_old_value = ["rusty_value0", "rusty_value1", "rusty_value2", "rusty_value3"] new_values = dear_old_value print id(dear_old_value) # 50779920 print id(new_values) # 50779920 )初始化为新的new_values对象(在内存中具有不同的位置),然后我们将项目推送到{ {1}}进入它 如果您现在检查ID,您将获得此结果:

list

请记住,Python中的所有对象的行为都是这样的。