連想配列(マップ/ハッシュ/ディクショナリ)をコピーするには (clone / copy / dup)

連想配列(マップ/ハッシュ/ディクショナリ)をコピーする方法。

PHP

配列を別の変数に代入するだけでコピーになる。しかも deep copy になる。

$src = array('a' => array(10, 20, 30), 'b' => 2, 'c' => 3);
$dst = $src;
$src['a'][0] = 100; // $dst['a'][0] は 10 のまま

添字が整数の配列でも同じ

Python

dic2 = dic.copy()

Ruby / JRuby

shallow copy

Object#clone
Object#dup

shallow copyなので、コピー元の要素のオブジェクト自体を変更した場合は、コピー先にも伝搬する。

hash = {'a' => 10, 'b' => 20, 'c' => [30, 31, 32]}

hash2 = hash.clone

hash['b'] = 21     # 要素の変更はコピー先には影響しない
hash['c'][2] = 320 # 要素のオブジェクト自体の変更はコピー先に影響する

p hash2
# => {"a"=>10, "b"=>20, "c"=>[30, 31, 320]}

Perl

shallow copy の例

my %src = ...;
my %dst = %src

代入するだけでコピーされる。

JavaScript

shallow copy

function clone(src){
    var dst = {}
    for(var k in src){
        dst[k] = src[k];
    }
    return dst;
}
map_copy = map.clone();
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。