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

2024-09-28 19:23:31 发布

您现在位置: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)

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

output:

[-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, ...]


Tags: inforifplotiscounterrangeplt
1条回答
网友
1楼 · 发布于 2024-09-28 19:23:31

即使缺少部分代码,我想您也会面临以下问题:

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']

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

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']

在Python中,您应该将变量名看作对象的标记
在我们的例子中,我们没有将dear_old_values中包含的值赋给new_values,我们只是说dear_old_values引用的对象现在也将被new_values引用。
您可以检查对象的ID以确认这一点:

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)初始化为一个新的list对象(在内存中有一个不同的位置),然后将dear_old_varables中的项推入其中。
如果您现在检查ID,您将得到以下结果:

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

new_values = list(dear_old_value)

print id(dear_old_value) # 41342736
print id(new_values)     # 41358240

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

相关问题 更多 >