我编写了一些代码来帮助我在使用 * 来“乘以”列表时查看实际引用。
程序如下:
empty_row = [None] * len(A[0])
empty_matrix = [ empty_row ] * len(A)
for i in range(len(empty_matrix)):
print(id(empty_matrix[i]))
for j in range(len(empty_matrix[0])):
print(" "+ str(id(empty_matrix[i][j])), end = ", ")
print()
输出似乎证实了我的假设,即矩阵的所有元素都引用同一个对象:
2856577670848
140733388238040, 140733388238040,
2856577670848
140733388238040, 140733388238040,
2856577670848
140733388238040, 140733388238040,
我为矩阵的每个元素赋值并打印矩阵
for i in range(len(A)):
for j in range(len(A[0])):
empty_matrix[i][j] = i*10+j
for r in empty_matrix:
for c in r:
print(c, end = ", ")
print()
输出是
20, 21,
20, 21,
20, 21
似乎引用了该行,但没有引用其元素。
我还希望该行的元素能够作为参考,即。我期望得到这个输出:
21, 21,
21, 21,
21, 21
有人可以向我解释为什么我的期望是错误的吗?这段代码中哪里发生了引用,哪里没有发生引用?还是我的验证码不正确?
@Tim Roberts 在他的第一条评论中回答了这个问题(谢谢!)
我在作业后打印了ID,我应该在发布问题之前检查一下,希望这个问题对其他初学者有用
1782995372160
1782914902928, 1782914902960,
1782995372160
1782914902928, 1782914902960,
1782995372160
1782914902928, 1782914902960,