>>> rows = [['']*5]*5
>>> rows
[['', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', '']]
>>> rows[0][0] = 'x'
は当然のことながら、私は、行になることを期待:リスト上の乗算演算子を使用してポインタのリストを作成するのはなぜですか?
[['x', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', '']]
その代わり、私が手:
[['x', '', '', '', ''], ['x', '', '', '', ''], ['x', '', '', '', ''], ['x', '', '', '', ''], ['x', '', '', '', '']]
*行リストの要素は[ '']同じ古いへのポインタであると思われます5リスト。なぜこのように動作し、これはPythonの機能ですか?
リストからリストの理解構文を作成した場合、「正しく動作しています」というメッセージが表示されます。 範囲(5)のyに対して 'rows = [['は範囲(5) ] ' – xyzman
これは"動作 "します:' rows = [[''] * 5(範囲(5)のyに対して) ' – xyzman