キン〇マハムスター佐藤  2021/03/01更新

Pythonのダメなところ


Pythonってシンプルでいいよね。簡単だし、昔学校で習ったC言語は大違い。

例えば配列10個を0で初期化するとき

a = [0]*10


配列100000個でも

a = [0]*100000


簡単で分かりやすい。


しかし、2次元配列の場合

a = [ [0,0,0] ]*3

print(a)

# 結果:[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
b = [ [0]*3 ]*3

print(b)

# 結果:[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

このように書けて簡単に見えるけど、このまま一か所だけ書き換えてみると

a = [ [0,0,0] ]*3
a[1][1] = 9
print(a)

# 結果:[[0, 9, 0], [0, 9, 0], [0, 9, 0]]

a = [ [0]*3 ]*3
a[1][1] = 9
print(a)

# 結果:[[0, 9, 0], [0, 9, 0], [0, 9, 0]]

[1][1]を変えただけなのに3か所変わる。

なにこの機能? いつ使うねん![0, 9, 0]が3つになる、バグの温床やん

1次元配列のポインタが3つ入ってるの?

a = [[0]*3 for _ in range(3)] 
a[1][1] = 9 

print(a) 
# 結果:[[0, 0, 0], [0, 9, 0], [0, 0, 0]] 

↑これはOK

これは分らんよ、むずいヨ

タイトルとURLをコピーしました