Python中2D数组赋值时所有行同步修改的原因咨询
问题核心原因
你创建二维数组的写法matrix = [[0]*n]*n存在逻辑问题:Python中*操作符对列表做乘法时,只会复制列表的引用,不会生成新的独立列表。也就是说你的matrix变量里存储的n个行,本质上是同一个列表对象的多次引用,修改任意一行的元素,所有行都会同步变化。
疑问解答
- 疑问1:我仅将
matrix[0][1]赋值为6,为什么输出中每一行的第二个元素都变成了6?
答:因为所有行指向同一个列表,修改第0行的第2个元素,等价于直接修改这个共享列表的第2个元素,所有引用这个列表的行都会同步更新。 - 疑问2:第一个while循环中我仅对第一行元素进行了赋值,为什么所有行都被写入了相同的数据?
答:你给第一行赋值的操作本质上是给共享列表赋值,所有引用这个列表的行都会显示相同的内容。
修复方案
把二维数组的创建逻辑改成列表推导式,确保每一行都是独立的新列表:
matrix = [[0]*n for _ in range(n)]
替换原有的matrix = [[0]*n]*n即可解决问题。
内容的提问来源于stack exchange,提问作者Lalit Bhardwaj
相关产品推荐
相关产品推荐

