0

以下は、リストのリストを生成する、機能しないコードと機能するコードです。

例 1 は正しく機能しません。最後に追加されたリストが何度も繰り返されます。

削除を新しいリストの作成に置き換えた例 2 は正しく機能します。

# Example 1, this does not work correctly
l1 = []
l2 = []
x = 0
for n in range(0,3):
    del l1[:] # deleting all list elements
    for i in range(0,3):
        l1.append(x)
        x+=1
    l2.append(l1)
print(l2)


# Example 2, this works correctly
l2 = []
x = 0
for n in range(0,3):
    l1 = [] # creating the list each loop through
    for i in range(0,3):
        l1.append(x)
        x+=1
    l2.append(l1)
print(l2)
4

2 に答える 2

4

最初の例でl1は、ずっと同じリスト オブジェクトです。その場合、このオブジェクトへl2.append(l1)の参照を に挿入します。ループが再開され、 内のすべてを削除すると、 内のリストもすべて削除されます。これは同じリストであるためです。同じリスト オブジェクトを複数回追加しているため、クリアするたびに のすべてのリストがクリアされます。l1l2l1l2l2l2

2 番目の例では、毎回個別のリスト オブジェクトを作成します。したがって、各リスト オブジェクトは独立しており、1 つをクリアしても他のオブジェクトには影響しません。

于 2013-01-19T06:43:22.433 に答える
3

#1コードの視覚化-http: //goo.gl/6ICqo

l2l1同じオブジェクト(リスト)を参照します。リストのすべての要素を削除すると、変更はとに反映されl2ますl1

#2コードの視覚化-http: //goo.gl/fkoqh

ここで、コードが実行されるl1 = []と、l1の参照が再割り当てされます。ただし、l2の要素は元のオブジェクトを参照し続けます。

于 2013-01-19T07:15:26.393 に答える