这是因为Python如何处理内存中的对象。当您使用
* 2
要复制列表,Python不会在内存中创建单独的列表对象,它只复制第二个列表位置的内存指针。由于第一个元素发生变异时的这种行为,它也会影响第二个元素。
你可以使用
id()
函数检查Python中的对象id。你会看到的
a[0]
a[1]
会有相同的身份证。
>>> a = [[1] * 2] * 2
>>> a[0][0] = 2
>>> a
[[2, 1], [2, 1]]
>>> id(a[0])
140608840898432
>>> id(a[1])
140608840898432
>>> id(a[0]) == id(a[1])
True