Numpy赋值拷贝疑问:为何执行b=b+1后原数组a未被修改?
问题解析:为何numpy数组赋值后修改b不影响a?
先看这段代码:
import numpy as np a = np.zeros(10) b = a b = b + 1
运行后打印结果:
打印a的输出:
>>> a array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])打印b的输出:
>>> b array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
原因解释
核心要区分变量绑定和数组运算的内存行为:
- 执行
b = a时,变量b和a确实指向同一个numpy数组对象,共享同一块内存数据。 - 但
b = b + 1分两步执行:首先b + 1会创建一个全新的数组,存储原数组每个元素加1后的结果;然后b = ...把变量b重新绑定到这个新数组上,而a依然指向原来的全0数组。
如果想要修改b的同时改变a,得用numpy的原地修改方式,比如:
b += 1 # 或者 b[:] = b + 1
这两种操作会直接在原数组的内存空间里修改元素值,此时a和b还是指向同一个数组,打印a就会得到全1的结果。
内容的提问来源于stack exchange,提问作者TheProofIsTrivium
相关产品推荐
相关产品推荐

