Python创建4x5二维数组修改元素时所有行同步变更的问题求助
Python二维数组修改元素时所有行同步变化的问题解决
你用[[0]*cols]*rows创建二维数组的方式存在本质问题:*rows并没有生成4个独立的列表,而是让数组里的每一行都指向同一个列表对象。所以你修改任意一行的元素,其他行因为引用的是同一个对象,自然会跟着同步变化。
可以通过打印每行的内存地址验证这一点:
rows, cols = (4,5) arr = [[0]*cols]*rows print(id(arr[0]), id(arr[1]), id(arr[2]), id(arr[3]))
输出的四个id完全相同,说明四行是同一个列表的引用。
正确的创建方式
1. 列表推导式(推荐)
这种方式会在每次循环中生成一个新的列表,确保每行都是独立对象:
rows, cols = (4,5) arr = [[0]*cols for _ in range(rows)]
2. 嵌套循环创建
和列表推导式原理一致,手动逐行生成独立列表:
rows, cols = (4,5) arr = [] for _ in range(rows): arr.append([0]*cols)
修改元素测试:
arr[0][2] = 3 print(arr)
输出结果正常,只有目标元素被修改:
[[0, 0, 3, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
内容的提问来源于stack exchange,提问作者QuestionGuy
相关产品推荐
相关产品推荐

