このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

シャローコピーとディープコピー

プログラミングのミニ知識シリーズ(って、そんなシリーズねーよ)。

「変数aの内容を変数bにコピー」ってのを3種類書いてみました。最初のは一番シャロー、どんどんディープになります。下に絵も描きましたよ。


var a = [{x:0, y:0}, {x:0, y:0}];
// aをbにコピー その1
var b = a;
// aを変更
a[0] = {x:1, y:1};
a[1].x = 1;
// aの変更でbはどうなったかな?


var a = [{x:0, y:0}, {x:0, y:0}];
// aをbにコピー その2
var b = new Array(2);
b[0] = a[0];
b[1] = a[1];
// aを変更
a[0] = {x:1, y:1};
a[1].x = 1;
// aの変更でbはどうなったかな?


var a = [{x:0, y:0}, {x:0, y:0}];
// aをbにコピー その3
var b0 = new Object();
b0.x = a[0].x;
b0.y = a[0].y;
var b1 = new Object();
b1.x = a[1].x;
b1.y = a[1].y;
var b = new Array(2);
b[0] = b0;
b[1] = b1;
// aを変更
a[0] = {x:1, y:1};
a[1].x = 1;
// aの変更でbはどうなったかな?

新しく作り出した(領域確保した)部分がピンクで塗ってあります。