13

私のものと同じタイトルの以前の質問が投稿されましたが、同じ質問 (だと思います) が、コードに他の問題がありました。そのケースが私のケースと同一であるかどうかを判断できませんでした.

とにかく、リスト内の要素をリストに置き換えたい。コード:

myNestedList = [[0,0]]*4 # [[0, 0], [0, 0], [0, 0], [0, 0]]
myNestedList[1][1] = 5

私は今期待しています:

[[0, 0], [0, 5], [0, 0], [0, 0]]

しかし、私は得る:

[[0, 5], [0, 5], [0, 5], [0, 5]]

なんで?

これは、コマンド ラインで複製されます。Python 3.1.2 (r312:79147、2010 年 4 月 15 日、15:35:48) [GCC 4.4.3] on linux2

4

1 に答える 1

20

* 4 で同じオブジェクトへの 4 つの参照があります。代わりに、範囲を含むリスト内包表記を使用してカウントします。

my_nested_list = [[0,0] for count in range(4)]
my_nested_list[1][1] = 5
print(my_nested_list)

問題をもう少し具体的に説明するには:

yourNestedList = [[0,0]]*4
yourNestedList[1][1] = 5
print('Original wrong: %s' % yourNestedList)

my_nested_list = [[0,0] for count in range(4)]
my_nested_list[1][1] = 5
print('Corrected: %s' % my_nested_list)

# your nested list is actually like this
one_list = [0,0]
your_nested_list = [ one_list for count in range(4) ]
one_list[1] = 5
print('Another way same: %s' % your_nested_list)
于 2010-10-04T11:45:15.070 に答える