私はまだPythonに少し慣れていませんが、今は本当にばかげていると感じています。なぜなら、このforループが私が望むことをしていない理由を理解するために1時間費やしたからです。forループに1時間を費やすべきではありません。とにかく、私は辞書のリストを生成し、それぞれに一意の番号を付けようとしているので、これを行います...
def initiate(n):
records = {'num':0,'blah':0,'doubleblah':0}
x = []
for i in range(n):
x.append(records)
x[i]['num'] = i
return x
x = initiate(4)
print(x)
関数がこれを返すことを期待しています-
[
{'num': 0, 'doubleblah': 0, 'blah': 0},
{'num': 1, 'doubleblah': 0, 'blah': 0},
{'num': 2, 'doubleblah': 0, 'blah': 0},
{'num': 3, 'doubleblah': 0, 'blah': 0}
]
しかし、実際にはこれを返します-
[
{'num': 3, 'doubleblah': 0, 'blah': 0},
{'num': 3, 'doubleblah': 0, 'blah': 0},
{'num': 3, 'doubleblah': 0, 'blah': 0},
{'num': 3, 'doubleblah': 0, 'blah': 0}
]
...関数にいくつかのprintステートメントを追加すると、現在の辞書だけでなく、リスト内のすべての辞書に番号が追加されているように見えることがわかりました。x[i] = i
現在の辞書にのみ番号を追加するために明示的に使用しているため、コードがすべての辞書にどのように追加されるかは実際にはわかりません。