python-将数字添加到嵌套列表中的整数中

python-将数字添加到嵌套列表中的整数中,python,list,python-2.x,Python,List,Python 2.x,这就是我要做的事情: lis = [] # Initialize empty list for i in range(2): lis.append([[0]]*2) # First print print lis # Second print print lis[0][1][0] # Modify item lis[0][1][0] += 1 # Third print print lis firstprint将列表返回为[[0],[0],[[0],[0],[0]],这是正确的

这就是我要做的事情:

lis = []
# Initialize empty list
for i in range(2):
    lis.append([[0]]*2)

# First print
print lis

# Second print
print lis[0][1][0]

# Modify item
lis[0][1][0] += 1

# Third print
print lis
first
print
将列表返回为
[[0],[0],[[0],[0],[0]]
,这是正确的,我有一个由多个列表组成的第一个列表,每个列表也由多个列表组成(我需要这个嵌套列表来完成我的工作)。第二次打印将索引0和1中的项返回为
0
,这也是正确的。但是第三个
打印
显示了新列表,如下所示:

[[[1], [1]], [[0], [0]]]
而不是:

[[[0], [1]], [[0], [0]]]

这就是我真正的目标。我做错了什么?

这是因为两个内部列表实际上都是同一对象的副本,因此修改其中一个也会影响另一个

>>> l = [[0]]*2
>>> [id(x) for x in l]
[145328716, 145328716]             #same IDs
>>> l[0].append(4)
>>> l
[[0, 4], [0, 4]]
使用列表理解来避免:

>>> l = [[0] for _ in xrange(2)]
>>> [id(x) for x in l]           #Different IDs 
[145327372, 145327500]
>>> l[0].append(4)
>>> l
[[0, 4], [0]]
同时,也让我们明白了为什么这样做。好吧,这很快:)谢谢你,阿什维尼!