我是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]]
。
有人可以帮助我,并解释为什么我的代码无法按我想要的方式工作吗?非常感谢!
答案 0 :(得分:1)
您可以执行以下操作:
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]]
符合预期。
答案 1 :(得分:0)
在numpy视图和副本中,有两个不同的概念,在这种情况下,您想修改数据的副本。 An interesting article about that。
pool = np.array([[1,1],[1,1]])
def ringDisc(data):
data_new = np.copy(data) # <===== Here
data_new[1] = 0
return data_new
print(pool)
print(ringDisc(pool))
print(pool)