1. 程式人生 > >Julia: 引用與copy: 關於陣列、自定義型別與初始化

Julia: 引用與copy: 關於陣列、自定義型別與初始化

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)