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