Pythonの文法での疑問 set list
>>> a = [set([])]*7 >>> a [set(), set(), set(), set(), set(), set(), set()]
こんな感じでsetのリストを作ってa[1]だけに1を入れようとしたところ
>>> a[1].add(1) >>> a [{1}, {1}, {1}, {1}, {1}, {1}, {1}]
ってなるのなんでだろう...って思って Twitterで呟いたら、ありがたいリプが!!!
話は簡単で
a = [set([])] * 7
とすると
「set([]) が 7個コピーされて代入される」ので a[0]もa[1]も同じオブジェクトだからだそうです。
正しいやり方は
a = [ [] for i in range(7) ]
よく考えたら当たり前な話でした。
リプくださった皆さん、本当にありがとうございました。