Python 如何在不干扰原始阵列的情况下替换复制阵列的元素?

Python 如何在不干扰原始阵列的情况下替换复制阵列的元素?,python,numpy,Python,Numpy,我是python的新手,这让我困惑了一段时间 我写了下面的代码: pool = np.array([[1,1],[1,1]]) def ringDisc(data): data_new = data data_new[1] = 0 return data_new print(pool) print(ringDisc(pool)) print(pool) 我希望第一次打印的结果应该是[[1,1],[1,1]],第二次打印的结果应该是[[1,1],[0,0],最后一次打

我是python的新手,这让我困惑了一段时间

我写了下面的代码:

pool = np.array([[1,1],[1,1]])

def ringDisc(data):
    data_new = data
    data_new[1] = 0
    return data_new

print(pool)
print(ringDisc(pool))
print(pool)
我希望第一次打印的结果应该是
[[1,1],[1,1]]
,第二次打印的结果应该是
[[1,1],[0,0]
,最后一次打印的结果应该是
[[1,1],[1,1]]

但我从中得到的是
[[1,1],[1,1]]
<代码>[[1,1],[0,0]]<代码>[[1,1],[0,0]]


有人能帮我解释一下为什么我的代码不能按我想要的方式运行吗?非常感谢

您可以执行以下操作:

data_new = np.copy(data)
内置
ringDisc

因此,通过此更改,代码如下所示:

import numpy as np

pool = np.array([[1, 1], [1, 1]])


def ringDisc(data):
    data_new = np.copy(data)
    data_new[1] = 0
    return data_new


print(pool)
print(ringDisc(pool))
print(pool)
结果是:

[[1 1], [1 1]]
[[1 1], [0 0]]
[[1 1], [1 1]]

正如所料。

在numpy视图中,复制是两个不同的概念,在您的情况下,您需要修改数据的副本

正如@Rafael提到的,你可以做这样的事情。
pool=np.array([[1,1],[1,1]])
def环形光盘(数据):

data_new=np.copy(data)#对于“为什么会发生这种情况”(这不是很直观,实际上是一个非常复杂的问题):在python中,
pool
data
data_new
都引用相同的对象。没有一个步骤可以复制。@GPhilo当我写下这个awnser时,现有的代码还不存在@Rafael仅将
data\u new=np.copy(data)
作为awser放入。我还把它竖起了。没问题!很高兴这对你有帮助。@维罗尼卡,如果解决了你的问题,请考虑接受这个答案或任何其他答案,通过点击相应的答案旁边的“嘀嗒”按钮来解决你的问题。