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),您将对该l1对象的引用插入到l2. 当循环重新启动并删除 中的所有内容时l1,您也会删除列表中的所有内容l2,因为那是同一个列表。您将同一列表对象附加到l2多次,因此每次清除它时,都会清除l2.

在第二个示例中,您每次都创建一个单独的列表对象。因此,每个列表对象都是独立的,清除一个对象不会影响其他对象。

于 2013-01-19T06:43:22.433 回答
3

#1 代码的可视化 - http://goo.gl/6ICqo

l2l1引用同一个对象(列表)。当您删除列表的所有元素时,更改会反映在l2和中l1

#2 代码的可视化 - http://goo.gl/fkoqh

在这里,当代码执行时l1 = []l1的引用被重新分配。但是l2's 元素一直引用原始对象。

于 2013-01-19T07:15:26.393 回答