読者です 読者をやめる 読者になる 読者になる

はわわーっ

はわわわわっ

[vim] Listを使う - part 2

リストを他の変数に代入しても中身は同じリストを参照している。なので、ある変数を変更すると他の変数も同じように変更される。

let a = [1, 2, 3]
let b = a
let a += [4, 5]
echo a  " [1, 2, 3, 4, 5]
echo b  " [1, 2, 3, 4, 5]

リストのコピーを作るには copy() または list[:] を使う。ただし、これらはネストされた部分はコピーされないので、そこを変更すると同じリストを参照している他の変数も変更される。

let a = [[11, 12], 2, 3]
let b = copy(a)
let c = a[:]
let a[2] = 10
echo a  " [[11, 12], 2, 10]
echo b  " [[11, 12], 2, 3]
echo c  " [[11, 12], 2, 3]

let a[0][1] = 100
echo a  " [[11, 100], 2, 10]
echo b  " [[11, 100], 2, 3]
echo c  " [[11, 100], 2, 3]

ネストされた要素もコピーするには deepcopy() を使う。これだとネストの深さが 100 までコピーされる。

let a = [[11, 12], 2, 3]
let b = deepcopy(a)
let a[0][1] = 100
echo a  " [[11, 100], 2, 3]
echo b  " [[11, 12], 2, 3]