Python动态创建二维数组所有子数组相同的问题求解
问题原因
- 核心问题是Python中列表是可变的引用类型,你在循环外部仅初始化了1次
x = [1, 1, 1],后续所有循环中修改的都是同一个列表对象的内容 - 每次执行
arr.append(x)时,实际是将同一个x的内存引用添加到arr中,而非复制当前x的内容存入arr - 循环结束后x最终被修改为
[1, 10, 100],arr中所有引用指向同一个对象,因此所有子数组输出结果都相同
修复方案
只要每次循环时都创建新的列表对象存储当前行的内容即可,修改后的代码如下:
rows = 10 cols = 3 arr = [] for i in range(rows): # 每次循环新建空列表存储当前行,避免共用同一个引用 x = [] for j in range(cols): x.append((i + 1) ** j) arr.append(x) print(arr)
也可以使用列表推导式实现更简洁的写法:
arr = [[(i+1)**j for j in range(3)] for i in range(10)]
内容的提问来源于stack exchange,提问作者code_learner93
相关产品推荐
相关产品推荐

