2012-03-04 2 views
2

可能性の重複:
Python list confusionのpython空のリストトリック

私はPythonのリストについて一つの小さな疑問を持っている:

これはなぜ起こるのでしょうか?

x = [[]] * 4 
x[0].append('x') -> [['x'], ['x'], ['x'], ['x']] 
+1

それを行うための正しい方法は、明示的に毎回新しいリストインスタンスを作成することです。そしてあなたのリストには同じメモリ空間を指すすべての4つのリストがあるので、それらのうちの1つを変更すると、その変更はすべてに影響します。 – rubik

+0

また、[Python FAQのこのエントリ](http://docs.python.org/faq/programming.html#how-do-i-create-a-multidimensional-list) – BioGeek

+0

を参照してください。ありがとう、ありがとう.. – cval

答えて

6

[]の同じインスタンスが重複しているので、あなたが最初の1 'x'に追加するとき、あなたは実際にすべてにそれを追加する - それらはすべて同じオブジェクトであるため!あなたが4回同じリストをコピーしているので

x = [[] for _ in range(4)] 
+1

私はこの回答に可能な解決策を追加しました。あなたが気にしないことを願って:) –

+0

ありがとう!妥当と思われる)) – cval

+0

明確にする:インスタンス[]が*複製されていない*。式[[]] * 4は、[]の同じインスタンスへの4つの参照を持つリストを作成します。 – alexis