下面的代码
def change(in_array):
in_array += 1 # line a
in_array = in_array + 1 # line b
x = np.array([1, 2, 3])
change(x)
print(x)
打印[2 3 4]
。为什么会这样(为什么a和b两行不同)?您能否建议其他修改NumPy数组的方法,如在a行中所做的那样?一种方法是in_array[:] = in_array + 1
;在in_array[:] = ...
的情况下,传入数组的值是否总是会更改
Tags:
让我们看看下面的代码:
Try it online!
它输出:
您可能会看到变量0在内部和外部给出正确的答案。而变体1仅在内部提供正确的
这是因为变量0修改函数中提供的实际给定数组。变量1在函数内部创建一个修改后的副本,该副本只保留在函数内部,而实际传递的参数不会被修改
因此,变量0修改传递的参数,而变量1修改传递的参数的副本
在Python代码中,函数中的
a = a + 1
实际上在函数中创建了变量a
的副本。这个局部变量只会一直保留到函数结束,并在函数运行结束时被删除变量2,
a[:]
创建原始数组的视图,它就像对原始数组元素子集的引用,只是:
是整个数组的视图,分配给该视图会修改原始数组。可修改视图也由a[1:3]
之类的切片和a[2]
或a[[1,2]]
之类的索引创建写入
a[:] = some_operation(a)
可能是将a
的修改/转换副本重新分配给a
的最直观、最快速的方法变体3、4、5是将右侧表达式赋回数组
a
的其他奇特方式相关问题 更多 >
编程相关推荐