Python矩阵共享行的值

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

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

如果你在pythontutor中编写这段代码,你会发现主元组都指向同一个'row'元组并且是共享的。我明白,如果我做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)
python matrix shared
2个回答
0
投票

当你乘以一个元组时,你实际上并没有将它的内容相乘。您正在创建对其内存地址的引用。因此,如果编辑原始变量的内容,则共享其内存地址的所有变量也会更改。


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

因此,当多次追加相同的元组时,您会多次“共享”它。

© www.soinside.com 2019 - 2024. All rights reserved.