Julia:使用append的函数!修改其参数

问题描述 投票:0回答:1

我定义了一个函数,它接受一个数组作为参数,向其中附加一些值并返回附加的数组。 我看到我作为函数参数传递的数组被修改了,即使我的函数没有直接作用于它。

这是一个最小的代码

function test(t)
  y = t
  append!(y, [2])
  return y
end

然后,定义一个数组x

x = [1]

当我调用 test(x) 时,它返回[1, 2],这是预期的,但 x 现在也有值 [1, 2],我不明白......

arrays function julia append
1个回答
0
投票

在 Julia 中,有一个约定,当函数改变参数时,将

!
添加到函数名称中,请参阅本节末尾 https://docs.julialang.org/en/v1/manual/functions/#man -参数传递.

然而,这只是一个约定(以视觉方式展示事物)。正如 https://docs.julialang.org/en/v1/manual/functions/#man-argument-passing 中所述,无论您如何命名该函数,都使用“pass-by-sharing”,这意味着

y
指向内存中与
x
相同的地址。

如果你想避免

x
的突变,你必须编写
y = copy(t)
来创建一个独立的对象;或
y = deepcopy(t)
如果您想确保全新的对象,包括复制
x
指向的潜在对象。

© www.soinside.com 2019 - 2024. All rights reserved.