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

传入numpy数组作为函数参数时,为何有的函数会修改原数组有的不会?

NumPy函数修改原数组行为差异原因

这一差异本质是两种操作对数组对象的处理逻辑不同,结合Python传参规则即可解释:
Python给函数传递可变对象(比如NumPy数组)时,形参会和外部实参指向同一个内存地址的对象,两个函数的区别在于:

  • 函数f中的array = array/2是重新赋值操作:NumPy的算术运算默认会生成一个全新的数组对象存储计算结果,这行代码执行后,函数内部的array变量会解绑原来的外部数组引用,转而指向新生成的数组,自然不会修改外部原数组的值。
  • 函数g中的array[array > 2] = 2是原地修改操作:这行代码没有给array变量本身重新赋值,只是通过布尔索引直接修改array指向的原内存对象中的元素值,外部实参和形参指向的是同一个对象,所以原数组会同步被修改。

如果希望g也不修改外部原数组,可以在函数开头先做一次深拷贝:

def g(array):
    array = array.copy()
    array[array > 2] = 2
    return array

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:06:04