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

Julia中使用append!的函数为何会修改传入的数组参数?

问题原因与解决方法

为什么原数组会被修改?

在Julia中,数组是可变引用类型。当你执行y = t这行代码时,并没有生成新的数组,只是让变量y和函数参数t指向了同一个内存中的数组对象。

而append!是Julia里的原地修改函数(函数名末尾的!是Julia的明确约定:这类函数会直接修改输入的参数本身)。所以当你调用append!(y, [2])时,实际修改的是那个共享的数组实例,自然原数组x也会跟着变化。

解决办法

有两种常见的处理方式:

1. 先创建原数组的副本再操作

通过copy()函数或者切片语法t[:]生成原数组的独立副本,这样修改副本就不会影响原数组:

function test(t)
  y = copy(t) # 等价于 y = t[:]
  append!(y, [2])
  return y
end

调用后,原数组x仍为[1],函数返回[1, 2]。

2. 使用非原地修改的拼接函数

比如用vcat()函数,它会直接返回一个新的拼接数组,不会修改原输入:

function test(t)
  return vcat(t, [2])
end

这种方式更简洁,不需要额外的变量赋值,同样能保证原数组不被修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:45:58