パーソナルツール

ディクショナリのコピー

作者: 小見 拓 最終変更 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}}
ドキュメントアクション
コメント
blog comments powered by Disqus