【发布时间】:2019-04-25 04:02:41
【问题描述】:
所以我有一个创建矩阵的问题,但我不确定为什么要共享这些值?不确定是不是因为序列是引用类型?
如果你在 pythontutor 中编写这段代码,你会发现主元组都指向同一个“行”元组并且是共享的。我知道如果我做了return row*n,它会被共享,但是为什么当你连接元组或附加列表时,为什么会被共享(引用相同的内存地址) ?
def make_matrix(n):
row = (0, )*n
board = ()
for i in range(n):
board += (row,)
return board
matrix = make_board(4)
print(matrix)
与此代码相比,其中每一行都是单独的 (0,0,0,0) 并且不共享。
def make_board(n):
return tuple(tuple(0 for i in range(n)) for i in range(n))
matrix = make_board(4)
print(matrix)
【问题讨论】:
-
这就是语言的工作方式:
[hex(id(x)) for x in (0,) * 3] #=> ['0x5fb0d1c0', '0x5fb0d1c0', '0x5fb0d1c0']。你可以看到任何相乘的东西仍然是一个参考。