如下面的代码,为啥 a 和 b 最后的值会不一样?
>>> a = [[0,0,0]] * 3
>>> a
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> a[1][1] = 1
>>> a
[[0, 1, 0], [0, 1, 0], [0, 1, 0]]
>>> b = [[0,0,0], [0,0,0], [0,0,0]]
>>> b
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> b[1][1] = 1
>>> b
[[0, 0, 0], [0, 1, 0], [0, 0, 0]]
1
ysc3839 2021-05-22 23:13:17 +08:00 via Android 1
个人猜测 [x] * 3 只是把 x 引用 3 次,不会深拷贝。所以你改了 x 就全变了。
|
3
IgniteWhite 2021-05-23 00:24:22 +08:00
很生动的例子。Python 节点最近问了很多类似的可变对象 /不可变对象,深浅拷贝,或者 Python 里指针概念的问题,可以去参考一下。
|
4
0ZXYDDu796nVCFxq 2021-05-23 00:53:03 +08:00
a = [[0,0,0]] * 3
id(a[0]) id(a[1]) id(a[2]) b = [[0,0,0], [0,0,0], [0,0,0]] id(b[0]) id(b[1]) id(b[2]) |