繁体   English   中英

Python矩阵共享行的值

[英]Python matrix shared values of rows

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

如果你在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)

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

在第一个示例中,您创建了一个元组,并将其多次添加到矩阵中:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM