首页 > 解决方案 > 数组单字段更新乘法

问题描述

我生成一个列表,列表中的每个元素也是一个列表。我使用一个带有“for”循环的函数来完成它。当我更新列表的单个值时,它会在每个子列表中更新。

我注意到当我手动创建一个列表时,例如:

array = [['O', 'O', 'O'], ['O', 'O', 'O'], ['O', 'O', 'O']]

一切都按预期工作。但是,当我使用产生完全相同输出的函数时,它会失败。

def array_generation(size):
    array = []
    row = ['O'] * size
    for i in range(size):
        array.append(row)
    return array

myArray = array_generation(3)
myArray[0][0] = "S"

实际结果:[['S', 'O', 'O'], ['S', 'O', 'O'], ['S', 'O', 'O']]

预期结果:[['S', 'O', 'O'], ['O', 'O', 'O'], ['O', 'O', 'O']]

标签: python

解决方案


当您生成数组时,您会附加多次相同的引用。因此,当您更改指针的值时,您会更改每个值。

试试这个:

def array_generation(size):
    return [['O'] * size for _ in range(size)]

推荐阅读