syakoo's Lab

技術ブログやちょっと気合の入った記事を残すブログ

配列の宣言についての簡単な実験ログ(python)

背景

>>> list1 = [[]]*3
>>> list1[0].append([1])

このコードを実行したら以下のように返された

>>> list1
[[[1]], [[1]], [[1]]]        #[[[1]], [], []] <- こうなって欲しかった

オブジェクトidを出してみる

 とりあえずidを出力してみる。

>>> id(list1[0])
1594074527432
>>> id(list1[1])
1594074527432
>>> id(list1[2])
1594074527432

 同じだった。そりゃそうか。 これからは普通にループを使って宣言するようにしようと思う。

でもたまにこのやり方で宣言してて困ったことはなかったからいつも通り値を代入してみる。

>>> list1[0] = 123
>>> list1
[123, [[1]], [[1]]]

 これは大丈夫なのか。またidを見てみる。

>>> id(list1[0])
140717290791552
>>> id(list1[1])
1594074527432
>>> id(list1[2])
1594074527432

 idが変わっていることがわかる。値を直接代入すると大丈夫そう。

ちなみに

 [[]]*3 で宣言するのが悪いのかと思って、普通の配列を宣言してみる。

>>> list2 = [0]*3
>>> list2
[0, 0, 0]
>>> id(list2[0])
140717290787616
>>> id(list2[1])
140717290787616
>>> id(list2[2])
140717290787616

 idは同じみたい。でも普通の配列は代入するくらいしか使わなさそうだから心配はいらなさそう。