所以我有一个创建矩阵的问题,但是我不确定为什么要共享值?不确定是否由于序列是引用类型?
如果您使用pythontutor编写此代码,则会发现主元组都指向相同的“行”元组并被共享。我知道如果我return row*n
会被共享,但是为什么当您连接元组或追加列表时,为什么要共享它(指的是相同的内存地址) b>?
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)
答案 0 :(得分:0)
乘以元组时,实际上并没有乘以其内容。您正在创建对其内存地址的引用。因此,如果您编辑原始变量的内容,则共享其内存地址的所有变量也会更改。
答案 1 :(得分:0)
在第一个示例中,您创建了一个元组,并将其多次添加到矩阵中:
row = (0, )*n
for i in range(n):
board += (row,)
在第二个示例中,您将为每个添加项创建新的元组:
tuple(0 for i in range(n)) for i in range(n)
等同于:
for i in range(n):
row = tuple(0 for i in range(n))
board += (row,)
因此,当多次添加同一元组时,您将“共享”多次。