python列表的意外输出

sum*_*000 0 python list

我是python的新手,我正在尝试运行以下代码:

m=int(raw_input())
l=[[0]*2]*m
for i in range(0,m):
    for j in range(0,2):
        l[i][j]=raw_input()
        print l
        print "-------"
Run Code Online (Sandbox Code Playgroud)

输出:

3
1
[['1', 0], ['1', 0], ['1', 0]]
-------
2
[['1', '2'], ['1', '2'], ['1', '2']]
-------
3
[['3', '2'], ['3', '2'], ['3', '2']]
-------
4
[['3', '4'], ['3', '4'], ['3', '4']]
-------
5
[['5', '4'], ['5', '4'], ['5', '4']]
-------
6
[['5', '6'], ['5', '6'], ['5', '6']]
Run Code Online (Sandbox Code Playgroud)

但是,当我运行该程序时,预期的输出应该是

3
1
[['1', 0], ['1', 0], ['1', 0]]
-------
2
[['1', '2'], ['1', '2'], ['1', '2']]
-------
3
[['1', '2'], ['3', '2'], ['1', '2']]
-------
4
[['1', '2'], ['3', '4'], ['1', '2']]
-------
5
[['1', '2'], ['3', '4'], ['5', '2']
-------
6
[['1', '2'], ['3', '4'], ['5', '6']]
Run Code Online (Sandbox Code Playgroud)

它就像重新分配每个迭代列表后一样,但是当我递增'i'时,list元素应该像预期的输出一样.我需要帮助..

kev*_*kev 6

s * n, n * s    ==>   n shallow copies of s concatenated 
Run Code Online (Sandbox Code Playgroud)

请注意,副本很浅; 嵌套结构不会被复制.
这常常困扰着新的Python程序员; 考虑:

>>> lists = [[]] * 3
>>> lists
[[], [], []]
>>> lists[0].append(3)
>>> lists
[[3], [3], [3]]
Run Code Online (Sandbox Code Playgroud)

您可以将代码更改为:

l = [[0 for i in range(2)] for j in range(m)]
Run Code Online (Sandbox Code Playgroud)