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) ]

よく考えたら当たり前な話でした。

リプくださった皆さん、本当にありがとうございました。