Matriz maluca

Matriz maluca

por Eduardo Garcia de Souza -
Número de respostas: 2

Caros colegas e professores,

Algo muito estranho está ocorrendo com minha matriz do EP12.

Quanto dou o comando matriz[2][4] = 1, por exemplo, o valor 1 deveria ser colocado apenas na posição linha 2, coluna 4.

Entretanto, o programa está colocando 1 em todas as linhas na posição 4.

Já verifiquei tudo que era possível.

Seguem dois exemplos.

O primeiro como deveria funcionar corretamente.

O segundo, com o problema que está ocorrendo.

Depois de vários testes, percebi que se a matriz for digitada ao invés de ser "montada" com o append, funciona adequadamente.

O fato do nome da matriz ser letra maiúscula ou minúsculo não afeta nada.

Já fechei e abri novamente o python shell. Tentei o Spyder. Desliguei e religuei o computador. E nada.

Sem resolver esse problema, não consigo concluir o EP.

Agradeço muuuuito se alguém puder me orientar.

 

Em resposta à Eduardo Garcia de Souza

Re: Matriz maluca

por Agenor Gonçalves Neto -

Fala Eduardo, blz?! Descobriu o problema? Se não, vou tentar te explicar. É confuso mesmo.

A questão é que listas são mutáveis. Quando vc executa o seguinte código:

>>> matriz = []
>>> linha = [0, 0, 0]
>>> matriz.append(linha)
>>> matriz.append(linha)
>>> matriz.append(linha)
>>> matriz[1][2] = 6
>>> for i in matriz: print(i)

[0, 0, 6]
[0, 0, 6]
[0, 0, 6]
>>>

Funciona como se a matriz adicionasse a mesma linha(o mesmo objeto) três vezes. Por esse motivo, quando se altera uma linha está, na realidade, alterando todas. Agora, observe esse código:

>>> matriz = []

>>> linha = [0, 0, 0]
>>> matriz.append(linha[:])
>>> matriz.append(linha[:])
>>> matriz.append(linha[:])
>>> matriz[1][2] = 6
>>> for i in matriz: print(i)

[0, 0, 0]
[0, 0, 6]
[0, 0, 0]
>>>

O que acontece é que, a cada append, é adicionado uma cópia da linha(objetos diferentes) e por isso não são as mesmas. Logo, quando se altera uma linha, as outras não são alteradas.

Aconselho fortemente que vc leia o texto do link abaixo que esclarece melhor como funciona essa coisa toda de listas, referências, mutabilidade e mais.

https://pythonhelp.wordpress.com/2013/02/20/variaveis-valores-e-referencias/

Ainda, nesse outro tem o modo certo e errado criar matrizes. O interessante é utilizar o simulador para visualizar como é o funcionamento.

https://panda.ime.usp.br/aulasPython/static/aulasPython/aula11.html#criacao-de-matrizes

Espero que tenha ficado claro. Flw.