python - 在 Python 中为 2D 矩阵赋值的行为会有所不同,具体取决于它的初始化方式
问题描述
我在 Python3 代码块中有一个二维矩阵,其输出如下所示:
[
[0, 0, 0, 0],
[0, 0, 0, 0]
]
初始化它的代码就像这样:
mat = [[0] * col] * row
其中,col = 2,row = 4
现在,有一个循环应该根据索引更新值:
for i in range(len(mat)):
for j in range(len(mat[0])):
if i == 0:
print(i, j)
mat[i][j] = 999
print(mat)
它打印出来:
0 0
0 1
0 2
0 3
[[999, 999, 999, 999], [999, 999, 999, 999]]
这似乎不是逻辑输出,因为我只更新索引时i = 0
此外,如果初始化代码更改为:
mat = [
[0, 0, 0, 0],
[0, 0, 0, 0]
]
代替:
mat = [[0] * col] * row
然后输出如预期:
[[999, 999, 999, 999], [0, 0, 0, 0]]
取决于矩阵的初始化,这种输出不一致背后的原因是什么?此外,第一个输出中的所有索引(意外的一个)如何更新到999
它被明确检查的位置,i == 0
并且日志也验证了这一点?
解决方案
推荐阅读
- android - 如何使用 Android Studio 跳转到方法的末尾
- visual-studio-mac - VS for Mac - 我是否正在处理单元测试涵盖的代码?
- generics - 你将如何编写一个对任何类型元素的 doubly_linked_lists 进行操作的 Ada 通用函数?
- java - 这部分函数的名称是什么?
- javascript - 仅在 NodeJS 中成功时显示输出消息
- c# - 基于ClientBase在Postman中使用WCF服务
- javascript - 如何将数据从反应子组件传输到父组件
- python - 在 python 3.7 中使用 pickle 模块将对象作为列表加载
- c# - 使用 S7netplus 在 C# 中读取 Siemens PLC s7 字符串
- java - Firebase 不能将 Gmail 帐户用作子帐户