take @ example:
julia> version v"0.4.0-rc1" julia> foo = [1,2] 2-element array{int64,1}: 1 2 julia> baz = array(any,3) 3-element array{any,1}: #undef #undef #undef julia> = 1:3 foo[1] = -foo[1] baz[i] = foo println("loop",i) println("foo: ",typeof(foo),"->",foo) println("baz[",i,"]: ",typeof(baz[i]), "->", baz[i]) println("baz: ",typeof(baz),"->",baz) end loop1 foo: array{int64,1}->[-1,2] baz[1]: array{int64,1}->[-1,2] baz: array{any,1}->any[[-1,2],#undef,#undef] loop2 foo: array{int64,1}->[1,2] baz[2]: array{int64,1}->[1,2] baz: array{any,1}->any[[1,2],[1,2],#undef] loop3 foo: array{int64,1}->[-1,2] baz[3]: array{int64,1}->[-1,2] baz: array{any,1}->any[[-1,2],[-1,2],[-1,2]]
the results unexpected me, think baz
should any[[-1,2],[1,2],[-1,2]]
.
however, if foo
not array, results reasonable.
julia> foo = 1 1 julia> baz = array(any,3) 3-element array{any,1}: #undef #undef #undef julia> = 1:3 foo = -foo baz[i] = foo println("loop",i) println("foo: ",typeof(foo),"->",foo) println("baz[",i,"]: ",typeof(baz[i]), "->", baz[i]) println("baz: ",typeof(baz),"->",baz) end loop1 foo: int64->-1 baz[1]: int64->-1 baz: array{any,1}->any[-1,#undef,#undef] loop2 foo: int64->1 baz[2]: int64->1 baz: array{any,1}->any[-1,1,#undef] loop3 foo: int64->-1 baz[3]: int64->-1 baz: array{any,1}->any[-1,1,-1]
my question happened here, what's correct way assign array in for-loop?
edit: added baz = deepcopy(baz)
, goes fine. still want know reason.
julia has noteworthy differences other languages e.g. unlike matlab julia arrays assigned reference. reference alias, or alternate name existing variable. example, suppose make peter reference (alias) paul, can refer person either peter or paul. after baz[i] = foo
, changing elements of foo
modify baz[i]
well.
Comments
Post a Comment