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

为何变量‘D8’在第二行代码执行后被意外修改?

问题原因

这是因为numpy数组的赋值是引用传递:当你执行D8 = D7时,并没有生成D7的副本,只是让D8和D7指向内存中同一个数组对象。所以修改D7的内容时,D8作为同一个数组的引用,必然会同步变化。

解决办法

要保存D7的原始值到独立的D8中,需要创建数组的深拷贝,用numpy数组自带的copy()方法即可:

D8 = D7.copy()

D7[np.eye(D7.shape[0], D7.shape[1]).astype('bool')] = np.nan

执行这段代码后,D8会是一个完全独立的数组,修改D7的对角线为NaN时,D8会保持初始的数值不变。

额外说明
  • 对于numpy数组,直接赋值(a = b)属于引用传递,两个变量共享同一块内存数据
  • copy()方法会创建全新的数组对象,数据和原数组完全分离,修改其中一个不会影响另一个
  • 针对多维数组,copy()默认是深拷贝,会递归复制所有层级的元素,确保完全独立

内容的提问来源于stack exchange,提问作者George Quinn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:45:43