Prefácio
O problema que descobri ao gerar um array bidimensional hoje é principalmente a diferença entre objetos mutáveis e objetos imutáveis.
1 Ao gerar uma matriz unidimensional:
array1 = [0]*5
array2 = [0 for i in range(5)]
print('1', array1, '\n', '2', array2)
1 [0, 0, 0, 0, 0]
2 [0, 0, 0, 0, 0]
Faça uma certa modificação
array1[2] = 8
array2[2] = 8
print('1', array1, '\n', '2', array2)
1 [0, 0, 8, 0, 0]
2 [0, 0, 8, 0, 0]
Percebe-se que as modificações geradas nesses dois métodos são basicamente as mesmas.
2 Ao gerar uma matriz bidimensional, insira diretamente o código
row = 4
col = 4
array1 = [[0 for i in range(col)] for j in range(row)]
array2 = [[0]*col] * row
print('1', array1, '\n', '2', array2)
array1[2][2] = 8
array2[2][2] = 8
print('1', array1, '\n', '2', array2)
1 [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
2 [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
1 [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 8, 0], [0, 0, 0, 0]]
2 [[0, 0, 8, 0], [0, 0, 8, 0], [0, 0, 8, 0], [0, 0, 8, 0]]
Pode-se observar que quando usamos a multiplicação para gerar uma lista bidimensional a partir de uma lista unidimensional, alterar uma posição alterará a posição da terceira coluna de cada linha, porém, usando a fórmula de geração de lista, ela atende aos nossos requisitos e altera apenas o número na terceira linha e terceira coluna.
analisar:
Uma matriz unidimensional usa multiplicação para gerar diretamente uma matriz bidimensional. Seu objeto é uma lista, que é um objeto variável. Cada linha da matriz bidimensional gerada aponta para o mesmo objeto, portanto, alterar uma causará alterações. Este princípio é semelhante ao mecanismo de cópia python e cópia profunda. Ao gerar um array unidimensional, os números são objetos imutáveis, portanto, modificações em uma posição não afetarão os valores em outras posições.
Referência: link .