变量引用机制
对于可变复合类型(使用 ismuttable
判断),在赋值与传参时使用引用机制。 考虑以下代码:
julia> x=[1, 2, 3];
julia> y=x;
julia> x=[4, 5, 6];
julia> y
3-element Vector{Int64}:
1
2
3
再考虑如下代码
julia> x=[1, 2, 3];
julia> y=x;
julia> x[1]=0;
julia> y
3-element Vector{Int64}:
0
2
3
第一例中,在 x=[1, 2, 3]
时,首先数据被分配到某个位置(记作 h1
),然后创建 x
作为 h1
的引用/绑定
y=x
意图将 y 指向 x 对应的数据,实际也是 h1
的引用
x=[4, 5, 6]
操作产生新的数据块并更改 x 的绑定,而这不会影响到 y
而第二例的操作改变了 h1
里的数据,显得 y “同步更改”了
拷贝
copy
函数可以对数组进行「浅拷贝(shallow-copy)」,它只会复制外壳而不会复制内部数据
julia> a=[MS(0)]
1-element Vector{MS}:
MS(0)
julia> b=copy(a)
1-element Vector{MS}:
MS(0)
julia> push!(b, MS(1)); a
1-element Vector{MS}:
MS(0)
julia> b[1].v=1; a
1-element Vector{MS}:
MS(1)
deepcopy
函数可以对物体进行「深拷贝(deep-copy)」,它会复制所有东西,使用它可以不必担心互相干扰的问题。