You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 16:05:43