1、关于数组赋值,显然是指向同一对象的引用。
julia> a =[1,2,3]
3-element Array{Int64,1}:
1
2
3
julia> d =Array{Array{Int64,1},1}()
0-element Array{Array{Int64,1},1}
julia> push!(d,a)
1-element Array{Array{Int64,1},1}:
[1,2,3]
julia> b =a
3-element Array{Int64,1}:
1
2
3
julia> push!(a,4)
4-element Array{Int64,1}:
1
2
3
4
查看变量d,已经发生了变化!
julia> d
1-element Array{Array{Int64,1},1}:
[1,2,3,4]
2、 如果对于自定义的类型,比如foo,情况会如何?
julia> type foo
name::ASCIIString
old::Float64
foo() =new();
end
对foo进行赋值
julia> f1 =foo()
foo(#undef,0.0)
julia> f1.name ="sh"
"sh"
julia> f1.old =28.0
28.0
julia> f2=f1
foo("sh",28.0)
julia> e =foo[]
0-element Array{foo,1}
julia> push!(e,f1)
1-element Array{foo,1}:
foo("sh",28.0)
julia> f2.name ="bj"
"bj"
再查看一下e 和f1=>
julia> e
1-element Array{foo,1}:
foo("bj",28.0)
julia> f1
foo("bj",28.0)
3、注意,如果f1进行初始化后,此时是COPY!,并不影响f2 和e.
julia> f1=foo()
foo(#undef,1.0953763033e-314)
julia> f2
foo("bj",28.0)
julia> e
1-element Array{foo,1}:
foo("bj",28.0)
其它类型初始化?
julia> g=e
1-element Array{foo,1}:
foo("bj",28.0)
julia> e=foo[];
结果,也相同。
julia> g
1-element Array{foo,1}:
foo("bj",28.0)