简单的python列表修改

wak*_*aka 1 python python-3.x

谢谢你花时间回答这个问题.这里我很困惑为什么输出不匹配.

操作1:

x = [[0, 0], [0, 0]]
print(type(x)) # <class 'list'>
print(x) # [[0, 0], [0, 0]]

x[0][0] = 1
print(x) # [[1, 0], [0, 0]]
Run Code Online (Sandbox Code Playgroud)

操作2:

y = [[0] * 2] * 2
print(type(y)) # <class 'list'>
print(y) # [[0, 0], [0, 0]]

y[0][0] = 1
print(y) # [[1, 0], [1, 0]]
Run Code Online (Sandbox Code Playgroud)

我的理解是x和y应该是相同的.但看起来他们不是.我在这里错过了什么?

Joh*_*nck 6

你缺少的是当你这样做时:

y = [[0] * 2] * 2
Run Code Online (Sandbox Code Playgroud)

你已经创建了一个列表[0],然后[0, 0].调用此列表X.然后,您创建[X, X]了两个X指向相同基础列表的位置.因此,当您修改第一个列表时,第二个列表也会被修改.

为什么不修改第一个列表的第一个元素也会修改每个列表的第二个元素?好吧,那是因为[0] * 2真的是两个数字的列表,因为对0的引用不能被修改(想象一下,如果你的程序0意味着别的话就会发生恐怖!).