将列表附加到另一个Python列表

将列表附加到另一个Python列表,python,arrays,list,Python,Arrays,List,我有一个问题,当我将一维列表作为行多次附加到二维列表时,对二维列表的后续更改会影响所有行。这个线程()解释了为什么会出现这种情况——基本上每一行都是相同的子列表或对象,因此对该子列表的更改会更改2D列表中的每一行。然而,我不知道如何修复它。以下是我的例子: NumOfRows = 100 LanesToCheck = [0, 1, 2, 3] Lanes = [] for j in range(0,NumOfRows): Lanes.append(LanesToCheck) Lanes

我有一个问题,当我将一维列表作为行多次附加到二维列表时,对二维列表的后续更改会影响所有行。这个线程()解释了为什么会出现这种情况——基本上每一行都是相同的子列表或对象,因此对该子列表的更改会更改2D列表中的每一行。然而,我不知道如何修复它。以下是我的例子:

NumOfRows = 100
LanesToCheck = [0, 1, 2, 3]
Lanes = []
for j in range(0,NumOfRows):
    Lanes.append(LanesToCheck)
LanesToCheck用于初始化每一行,其思想是我的脚本的用户只需在一个简单的代码位置更改这个1D列表,整个2D数组就可以用它初始化。我知道我可以用:

Lanes.append([0, 1, 2, 3])
但是我想让这个LanesToCheck常量易于用户访问。有没有一种方法可以使用这个1D数组来初始化我的2D数组,使每一行都是一个单独的实体

Lanes = [0,1,2,3] * NumOfRows
非常像蟒蛇,但错了:-(

也许,如果您想明确表示您正在制作列表的副本:

import copy
Lanes = [copy.deepcopy(LanesToCheck) for i in xrange(NumOfRows)]
使用以下命令:-

Lanes = [LanesToCheck[:] for j in range(NumOfRows)] 
# makes copy of `LanesToCheck` every time.
通过这样做,您可以将每一行用作单独的实体

Lanes[0][0] = 11
如果将
11
插入第1行第1列,则其他行将保持不变

输出:-

[[11, 1, 2, 3], [0, 1, 2, 3], ...... and so on

也许是pythonic,但没有回答这个问题!
[0,1,2,3]*2
给出了
[0,1,2,3,0,1,2,3]
1D列表而不是列表列表。甚至
[0,1,2,3]*numorrows
也使用了内部列表的相同实例:
x=[0,1,2,3]*2
x[0][0]=11
给出了
[10,1,2,3]、[3,2]
你说得对,对不起!你甚至可以使用列表理解:
Lanes=[LanesToCheck[:]for j in range(numorrows)]
@SergeBallesta我刚才描述过单独使用行,谢谢,我现在更新我的答案。