参考文献的工作方式与预期不同

问题描述 投票:0回答:1

我编写了一些代码来帮助我在使用 * 来“乘以”列表时查看实际引用。
程序如下:

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

有人可以向我解释为什么我的期望是错误的吗?这段代码中哪里发生了引用,哪里没有发生引用?还是我的验证码不正确?

python reference
1个回答
0
投票

@Tim Roberts 在他的第一条评论中回答了这个问题(谢谢!)

我在作业后打印了ID,我应该在发布问题之前检查一下,希望这个问题对其他初学者有用

1782995372160
     1782914902928,      1782914902960,
1782995372160
     1782914902928,      1782914902960,
1782995372160
     1782914902928,      1782914902960,
© www.soinside.com 2019 - 2024. All rights reserved.