Julia: 引用與copy: 關於陣列、自定義型別與初始化
阿新 • • 發佈:2019-02-11
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)