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

为何修改numpy数组切片的两种赋值方式对原数组影响不同?

NumPy数组赋值差异的原因解析

两段代码及现象

第一段代码

a = np.zeros([32,32])
b = np.index_exp[:3,:3]
c = a[b]
c=1

执行后数组a仍全为0,不会因c的赋值操作改变。

第二段代码

a = np.zeros([32,32])
b = np.index_exp[:3,:3]
c = a[b]
c[:]=1

执行后数组a发生了改变。

差异核心原因

  • 第一段的c=1是变量重新绑定:执行c = a[b]时,c指向了a切片生成的视图(NumPy切片默认返回视图,与原数组共享内存),但c=1直接把变量c的指向改成了整数1,彻底切断了和原数组视图的关联,所以对a无影响。
  • 第二段的c[:]=1是视图内容的原地修改:c[:]表示对c这个视图对应的原数组区域进行批量赋值,本质是直接修改了视图共享的a的内存数据,因此a会同步变化。

内容的提问来源于stack exchange,提问作者James Huang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:25:23