Python矩阵共享行值

时间:2019-04-25 04:02:42

标签: python matrix shared

所以我有一个创建矩阵的问题,但是我不确定为什么要共享值?不确定是否由于序列是引用类型?

如果您使用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)

2 个答案:

答案 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,)

因此,当多次添加同一元组时,您将“共享”多次。