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
相关产品推荐
相关产品推荐

