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

Numpy object类型数组用copy()后修改新数组原数组仍被改动是什么原因?

问题原因

你使用的tri.copy()是numpy数组的浅拷贝:

  • 由于TRI_A是dtype=object的对象数组,数组内存储的是各个子numpy数组的内存引用,而非子数组本身的实际数据
  • 浅拷贝仅复制外层数组的结构,不会复制嵌套的子数组内容,拷贝得到的out和原数组tri的第3位元素指向同一个RGB数组对象
  • 当你执行out[3][索引] = 新值操作时,修改的是两个数组共享的RGB子数组,因此原数组TRI_A也会同步变化
解决方案

有两种常用的修复方案:

方案1:使用深拷贝完全复制所有嵌套结构

引入copy模块的deepcopy方法,递归复制所有层级的数组数据,完全隔离原对象和拷贝对象:

import copy
def mutate_color(tri):
    out = copy.deepcopy(tri)
    out[3][np.random.randint(3)] = np.random.randint(256)
    return out

方案2:仅对修改的RGB子数组单独做拷贝

如果你不需要修改前三个顶点坐标,也可以只对需要修改的RGB数组单独拷贝,性能比全量深拷贝更高:

def mutate_color(tri):
    out = tri.copy()
    # 单独拷贝RGB子数组,切断和原数组的引用关联
    out[3] = out[3].copy()
    out[3][np.random.randint(3)] = np.random.randint(256)
    return out

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:54:05