Python二维列表元素修改异常求助:为何修改一行全表变更?
为什么修改二维列表会所有行同步变化?
这不是Python解释器的问题,是你创建二维列表的方式踩了Python的引用坑。
你用l = [["0"]*3]*3创建列表时,*3并没有生成三个独立的子列表,而是把同一个["0","0","0"]列表的引用重复了三次。也就是说,你的二维列表里的三个子列表其实指向内存中的同一个对象,修改其中任何一个子列表的元素,另外两个都会跟着变化——因为它们本质上是同一个东西。
正确的创建方式
要生成三个独立的子列表,推荐用列表推导式:
l = [["0"]*3 for _ in range(3)]
这种写法会循环3次,每次都生成一个新的["0","0","0"]子列表,三个子列表是完全独立的对象。
也可以直接手动逐个定义:
l = [["0","0","0"], ["0","0","0"], ["0","0","0"]]
验证效果
用正确的方式创建后,再执行你的修改代码:
for i in range(3): l[0][i] = "1"
结果只会修改第一行:
[['1', '1', '1'], ['0', '0', '0'], ['0', '0', '0']]
单独修改元素l[1][1] = 1时,也只会改变第二行的第二个元素:
[['0', '0', '0'], ['0', 1, '0'], ['0', '0', '0']]
内容的提问来源于stack exchange,提问作者JaySabir
相关产品推荐
相关产品推荐

