将相同的列表附加到另一个列表

时间:2016-11-22 19:56:12

标签: python

我必须多次将同一个列表附加到另一个列表,然后只修改其中一个。 我试过了

my_range

但问题是,如果我尝试

list_a = []
list_b = [0,0,0]
for x in range(3):
    list_a.append(list_b)

它还会修改list_a[0][0] = 1 list_a[1][0]。 我怎么能避免这种情况?

3 个答案:

答案 0 :(得分:1)

如果你想要的是创建一个包含所有0的空列表的更好的方法来创建这样的列表:

my_list = [[0]*3 for _ in range(3)]

让我们验证结果是否存在相同的问题:

>>> my_list
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> my_list[0][0] = 1
>>> my_list
[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
# ^          ^          ^
# Yipee! value changed only once

要了解代码无效的原因,请查看:Python list of lists, changes reflected across sublists unexpectedly

答案 1 :(得分:0)

使用以下内容:

list_a = []
list_b = [0,0,0]
for x in range(3):
    list_a.append(list_b[:])

答案 2 :(得分:0)

您正在追加list_b三次,因此您要修改的是实际的list_b对象。你想要做的是做一个浅拷贝,这可以这样做

list_a.append(list(list_b))

或者像这样

list_a.append(list_b[:])