2014-10-22 73 views
1

我有点困惑这是如何工作的。Python引用附加列表

x = [] 
y = [] 
for i in range(5): 
    y.append(i) # Why does this create full copies of sub lists? 
    x.append(y) 
    #x.extend(y) # This works normal 

print x 

为什么x.append(y)告诫最终结果如下?你能否解释一下是否有一些背景参考值?

[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]] 

回答

3

y只有一个对象指向。它从一个空的列表开始。每次循环时,都会让单个对象变长。列表x[y, y, y, y, y]基本相同,它给出了你描述的结果。

当您使用x.extend(y),那么y当前元素被复制到列表x结束。这是完全不同的操作。