読者です 読者をやめる 読者になる 読者になる

プログラミングする数学信者

数学信者が数学とプログラミングの話題を中心にして何か書きます

JuliaにおけるArrayとイコール

Juliaで

A=[1 2]
B=A
A[1]=3

と実行すると、配列BはB=[3 2]という風に、C言語のポインタを扱うのと同じような結果になる。
元々こういう仕様で、MatlabOctaveと違うので注意しないといけない。

配列Aの中身をBにコピーするにはB=copy(A)を実行する。B=[A]でも同等の操作ができるっぽいけど、安全のために前者を使った方がいいかもしれない。

そもそも、上記に関することはMulti-dimensional Arraysのマニュアルに書いてあった。

In Julia, all arguments to functions are passed by reference. Some technical computing languages pass arrays by value, and this is convenient in many cases. In Julia, modifications made to input arrays within a function will be visible in the parent function. The entire Julia array library ensures that inputs are not modified by library functions. User code, if it needs to exhibit similar behavior, should take care to create a copy of inputs that it may modify.