ディクショナリのコピー
作者: 小見 拓
—
最終変更
2012年01月08日 12時08分
ディクショナリのコピー
- 単純な代入。変数var1、var2は同じディクショナリを参照している。
:let var1 = { "one":"item 1", "two":"item 2", "three":"item 3", "four":"item 4" } :let var2 = var1 :echo var1 :echo var2 "# => {'four': 'item 4', 'one': 'item 1', 'two': 'item 2', 'three': 'item 3'} "# => {'four': 'item 4', 'one': 'item 1', 'two': 'item 2', 'three': 'item 3'} :let var2.two = "XXXX" :echo var1 "# => {'four': 'item 4', 'one': 'item 1', 'two': 'XXXX', 'three': 'item 3'}
- copy()、deepcopy()でディクショナリの複製を作成できる。
:let var1 = { "one":"item 1", "two":"item 2", "three":"item 3", "four":"item 4" } :let var2 = copy(var1) :echo var1 :echo var2 "# => {'four': 'item 4', 'one': 'item 1', 'two': 'item 2', 'three': 'item 3'} "# => {'four': 'item 4', 'one': 'item 1', 'two': 'item 2', 'three': 'item 3'} :let var2.two = "XXXX" :echo var1 :echo var2 "# => {'four': 'item 4', 'one': 'item 1', 'two': 'item 2', 'three': 'item 3'} "# => {'four': 'item 4', 'one': 'item 1', 'two': 'XXXX', 'three': 'item 3'} :let var1 = { "one":"item 1", "two":"item 2", "three":"item 3", "four":"item 4" } :let var2 = deepcopy(var1) :echo var1 :echo var2 "# => {'four': 'item 4', 'one': 'item 1', 'two': 'item 2', 'three': 'item 3'} "# => {'four': 'item 4', 'one': 'item 1', 'two': 'item 2', 'three': 'item 3'} :let var2.two = "XXXX" :echo var1 :echo var2 "# => {'four': 'item 4', 'one': 'item 1', 'two': 'item 2', 'three': 'item 3'} "# => {'four': 'item 4', 'one': 'item 1', 'two': 'XXXX', 'three': 'item 3'}
- copy()はネストしたリスト、ディクショナリまでは複製しない。deepcopy()は複製する。
:let var1 = { "one":["aaa",11], "two":["bbb",22], "three":["ccc",33], "four":["ddd",44] } :let var2 = copy(var1) :echo var1 :echo var2 "# => {'four': ['ddd', 44], 'one': ['aaa', 11], 'two': ['bbb', 22], 'three': ['ccc', 33]} "# => {'four': ['ddd', 44], 'one': ['aaa', 11], 'two': ['bbb', 22], 'three': ['ccc', 33]} :let var2.two[1] = "XXXX" :echo var1 :echo var2 "# => {'four': ['ddd', 44], 'one': ['aaa', 11], 'two': ['bbb', 'XXXX'], 'three': ['ccc', 33]} "# => {'four': ['ddd', 44], 'one': ['aaa', 11], 'two': ['bbb', 'XXXX'], 'three': ['ccc', 33]} :let var1 = { "one":{"aaa":11}, "two":{"bbb":22}, "three":{"ccc":33}, "four":{"ddd":44} } :let var2 = copy(var1) :echo var1 :echo var2 "# => {'four': {'ddd': 44}, 'one': {'aaa': 11}, 'two': {'bbb': 22}, 'three': {'ccc': 33}} "# => {'four': {'ddd': 44}, 'one': {'aaa': 11}, 'two': {'bbb': 22}, 'three': {'ccc': 33}} :let var2.two.bbb = "XXXX" :echo var1 :echo var2 "# => {'four': {'ddd': 44}, 'one': {'aaa': 11}, 'two': {'bbb': 'XXXX'}, 'three': {'ccc': 33}} "# => {'four': {'ddd': 44}, 'one': {'aaa': 11}, 'two': {'bbb': 'XXXX'}, 'three': {'ccc': 33}} :let var1 = { "one":["aaa",11], "two":["bbb",22], "three":["ccc",33], "four":["ddd",44] } :let var2 = deepcopy(var1) :echo var1 :echo var2 "# => {'four': ['ddd', 44], 'one': ['aaa', 11], 'two': ['bbb', 22], 'three': ['ccc', 33]} "# => {'four': ['ddd', 44], 'one': ['aaa', 11], 'two': ['bbb', 22], 'three': ['ccc', 33]} :let var2.two[1] = "XXXX" :echo var1 :echo var2 "# => {'four': ['ddd', 44], 'one': ['aaa', 11], 'two': ['bbb', 22], 'three': ['ccc', 33]} "# => {'four': ['ddd', 44], 'one': ['aaa', 11], 'two': ['bbb', 'XXXX'], 'three': ['ccc', 33]} :let var1 = { "one":{"aaa":11}, "two":{"bbb":22}, "three":{"ccc":33}, "four":{"ddd":44} } :let var2 = deepcopy(var1) :echo var1 :echo var2 "# => {'four': {'ddd': 44}, 'one': {'aaa': 11}, 'two': {'bbb': 22}, 'three': {'ccc': 33}} "# => {'four': {'ddd': 44}, 'one': {'aaa': 11}, 'two': {'bbb': 22}, 'three': {'ccc': 33}} :let var2.two.bbb = "XXXX" :echo var1 :echo var2 "# => {'four': {'ddd': 44}, 'one': {'aaa': 11}, 'two': {'bbb': 22}, 'three': {'ccc': 33}} "# => {'four': {'ddd': 44}, 'one': {'aaa': 11}, 'two': {'bbb': 'XXXX'}, 'three': {'ccc': 33}}