forループで配列を変更するときの奇妙な動作

Gnimuc

この例を見てください:

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> for i = 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]]

結果は私には予想外でした、私はそうあるbazべきだと思いますAny[[-1,2],[1,2],[-1,2]]

ただし、fooが配列でない場合、結果は妥当です。

julia> foo = 1
1

julia> baz = Array(Any,3)
3-element Array{Any,1}:
 #undef
 #undef
 #undef

julia> for i = 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]

私の質問は、ここで何が起こったのか、forループで配列を割り当てる正しい方法は何ですか?

編集:私は追加しbaz = deepcopy(baz)、すべてがうまくいきます。まだ理由を知りたい。

レザアフザラン

Juliaには、他の言語との顕著な違いがあります。たとえば、MATLABとは異なり、Julia配列は参照によって割り当てられます。参照は、エイリアス、または既存の変数の代替名です。たとえば、peterをpaulへの参照(エイリアス)にすると、その人をpeterまたはpaulのいずれかとして参照できます。の後baz[i] = foo、の要素をfoo変更するとbaz[i]、も変更されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

forループで配列を変更するときの奇妙な動作

分類Dev

論理配列を変更するときの奇妙な動作

分類Dev

JavaScriptで配列をループしているときの奇妙な動作

分類Dev

javascriptで配列を作成するときの奇妙な動作

分類Dev

Cで文字列配列の要素を出力するときの奇妙な動作

分類Dev

ループでread_lineを使用するときの奇妙な動作

分類Dev

向きの変更で奇妙な動作をするEditText

分類Dev

参照を介してテーブル行を変更するときの奇妙な動作

分類Dev

ループ内の配列を更新およびログ記録するときに奇妙な動作をするjavascriptforループ

分類Dev

WindowsCMDでボリュームを変更するときのsys.pathの奇妙な動作

分類Dev

静的メソッドで配列Javaをコピーするときの奇妙な動作

分類Dev

配列で最大数を見つけるときの奇妙な動作

分類Dev

PHPでの奇妙な参照/ループの動作を理解する

分類Dev

forループでインデックスを宣言するときの奇妙な動作

分類Dev

文字をchar配列にコピーすると、奇妙な動作が発生するのはなぜですか

分類Dev

配列をループするときに奇妙な整数を取得するのはなぜですか

分類Dev

ジュリア、辞書を反復処理中にキーを変更するときの奇妙な動作

分類Dev

配列ソートに関するこの奇妙な動作を誰かが説明できますか?

分類Dev

連想配列を使用したforループでPHPが奇妙に動作する

分類Dev

データの配列で$ ampを使用するPHPstr_replaceの奇妙な動作

分類Dev

Pythonで文字列を分割するときの値の解凍の奇妙な動作

分類Dev

Cでlonglong変数を定義するときの奇妙な動作

分類Dev

Cで「文字列」を返すときの奇妙な動作

分類Dev

ループ内の配列要素を変更すると配列が削除されるのはなぜですか

分類Dev

forループの内側と外側の異なる値としての配列の奇妙な動作

分類Dev

パンダgroupbyは、NaNがグループ列にあるときに奇妙な動作を適用します

分類Dev

動的tableViewでtextFieldsを含むセルをリロードするときの奇妙な動作

分類Dev

2D配列を3D配列にネストするときの奇妙な動作

分類Dev

関数オブジェクトを作成するときの奇妙なテンプレート文字列の動作

Related 関連記事

  1. 1

    forループで配列を変更するときの奇妙な動作

  2. 2

    論理配列を変更するときの奇妙な動作

  3. 3

    JavaScriptで配列をループしているときの奇妙な動作

  4. 4

    javascriptで配列を作成するときの奇妙な動作

  5. 5

    Cで文字列配列の要素を出力するときの奇妙な動作

  6. 6

    ループでread_lineを使用するときの奇妙な動作

  7. 7

    向きの変更で奇妙な動作をするEditText

  8. 8

    参照を介してテーブル行を変更するときの奇妙な動作

  9. 9

    ループ内の配列を更新およびログ記録するときに奇妙な動作をするjavascriptforループ

  10. 10

    WindowsCMDでボリュームを変更するときのsys.pathの奇妙な動作

  11. 11

    静的メソッドで配列Javaをコピーするときの奇妙な動作

  12. 12

    配列で最大数を見つけるときの奇妙な動作

  13. 13

    PHPでの奇妙な参照/ループの動作を理解する

  14. 14

    forループでインデックスを宣言するときの奇妙な動作

  15. 15

    文字をchar配列にコピーすると、奇妙な動作が発生するのはなぜですか

  16. 16

    配列をループするときに奇妙な整数を取得するのはなぜですか

  17. 17

    ジュリア、辞書を反復処理中にキーを変更するときの奇妙な動作

  18. 18

    配列ソートに関するこの奇妙な動作を誰かが説明できますか?

  19. 19

    連想配列を使用したforループでPHPが奇妙に動作する

  20. 20

    データの配列で$ ampを使用するPHPstr_replaceの奇妙な動作

  21. 21

    Pythonで文字列を分割するときの値の解凍の奇妙な動作

  22. 22

    Cでlonglong変数を定義するときの奇妙な動作

  23. 23

    Cで「文字列」を返すときの奇妙な動作

  24. 24

    ループ内の配列要素を変更すると配列が削除されるのはなぜですか

  25. 25

    forループの内側と外側の異なる値としての配列の奇妙な動作

  26. 26

    パンダgroupbyは、NaNがグループ列にあるときに奇妙な動作を適用します

  27. 27

    動的tableViewでtextFieldsを含むセルをリロードするときの奇妙な動作

  28. 28

    2D配列を3D配列にネストするときの奇妙な動作

  29. 29

    関数オブジェクトを作成するときの奇妙なテンプレート文字列の動作

ホットタグ

アーカイブ