我有这种情况:
>>> y=[[1]]
>>> y=y*2
>>> y
[[1], [1]]
>>> y[0].append(2)
>>> y
[[1, 2], [1, 2]]
我想要做的是将2添加到外部列表中的第一个列表中,即这是所需的输出:
[[1, 2], [1]]
答案 0 :(得分:1)
这样做的:
y=[[1]]
y=y*2
创建一个列表,其中包含对同一列表对象的两个引用:
>>> y=[[1]]
>>> y=y*2
>>> id(y[0]) # The id of the first element...
28864920
>>> id(y[1]) # ...is the same as the id of the second.
28864920
>>>
这意味着,当你修改一个时,另一个也会受到影响。
要解决此问题,您可以改为使用list comprehension:
>>> y = [[1] for _ in xrange(2)] # Use range here if you are on Python 3.x
>>> y
[[1], [1]]
>>> id(y[0]) # The id of the first element...
28864920
>>> id(y[1]) # ...is different from the id of the second.
28865520
>>> y[0].append(2)
>>> y
[[1, 2], [1]]
>>>
答案 1 :(得分:0)
替换: y = y * 2 y.append([1]),以获得不同的引用。