2
私はちょっとしたことがあります。 zipで開始されたタプルキーを持つ辞書が、単一のキーの更新時にすべてのキーを更新するのはなぜですか?
keys = range(8)
DICT={}
for k in keys:
DICT[k] = []
print DICT
#returns
#{0: [], 1: [], 2: [], 3: [], 4: [], 5: [], 6: [], 7: []}
DICT[1].append('mkay')
print DICT
#returns
#{0: [], 1: ['mkay'], 2: [], 3: [], 4: [], 5: [], 6: [], 7: []}
しかし、私は違った辞書を初期化する場合は、添付の動作は全く異なっている:あなたが期待するように、このコードは動作し
DICT = dict(zip(keys,[[]]*len(keys)))
print DICT
#returns
#{0: [], 1: [], 2: [], 3: [], 4: [], 5: [], 6: [], 7: []}
だから、それは同じに見えます。しかしそれではありません:
DICT[1].append('mkay')
print DICT
#returns
#{0: ['mkay'], 1: ['mkay'], 2: ['mkay'], 3: ['mkay'], 4: ['mkay'], 5: ['mkay'], 6: ['mkay'], 7: ['mkay']}
ここで何が起こっているのか分かりませんか?私はこれを得たかもしれない他の誰のためにもこれを掲示すると思った。
何も不思議ではありません。 '[]]'に 'len(keys)'を掛け合わせることで、すべてが同じオブジェクトを指すリストのリストを作成しました。 – Kasramvd
http://stackoverflow.com/a/36452923/2201041を参照すると、私にはより明確な回答が得られました。 – JETM