シャローコピーとディープコピー
データをコピーするとき
- リファレンスをコピーするだけで参照先は同じ
- コピーしたデータを変更するとコピー元も変更される
- 全く同じデータを複製する
- コピーしたデータに何をしようとコピー元に影響は及ぼさない
の2通りがあってコードだと
use strict; use warnings; use Data::Dumper;sub p {warn Dumper @_;my @c = caller;print STDERR " at $c[1]:$c[2]\n\n"} use Storable qw/dclone/; sub shallow { my $org = shift; my $cp = $org; $cp->{ho} = "_changed_"; } sub deep { my $org = shift; my $cp = dclone($org); $cp->{ho} = "_changed_"; } my %d = (qw/ho ge/); deep(\%d); p \%d; shallow(\%d); p \%d;
% perl t.pl $VAR1 = { 'ho' => 'ge' }; at t.pl:22 $VAR1 = { 'ho' => '_changed_' }; at t.pl:24
てーのを何て言うんだっけと思ったら、前者がシャローコピー(shallow copy)またはサーフェイスコピー(surface copy)で後者がディープコピー(deep copy)だった。
http://books.google.co.jp/books?id=w4DmQjEWjZAC&pg=PA539&lpg=PA539#v=onepage&q&f=false
ググった限りはjava界隈の用語のようだ。