• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pedrosorio

Copiar Listas

9 mensagens neste tópico

def play(board):
   score=-10000
   for i in range(3):
      for j in range(3):
         if board[i][j]==0:
            board[i][j]=me
            s=scoring(features(board))
            print s,score
            if s>score:
               print "wtf",s,score
               score = s
               bmax = list(board)
            print bmax,board
            board[i][j]=0
            print bmax,board
   return bmax

Não percebo porquê mas bmax e board são sempre iguais, isto é, quando faço board[j] = 0, altera-me também o bmax...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Le este artigo, http://henry.precheur.org/2009/2/11/Python:_copying_a_list_the_right_way.html

python faz ambos bmax e board apontarem para a mesma lista....

Edit:

Depois de ler melhor o teu código estas a copiar da maneira correcta, tenta fazer id(bmax), id(board) e ve se esta a apontar para o mesmo endereço de memoria

Sim, eu sei que copiar estruturas em python tem o seu quê de pouco intuitivo. O problema é que acabei de fazer isso e dá-me valores de memória diferentes. Estou parvo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ora como são listas de listas, o mais provável é que as listas internas estejas a ser copiadas de maneira não correcta.

Ou seja, apesar de ambas as listas serem diferentes (diferentes endereços de memória) os seus elementos são iguais (as listas internas tem os mesmos endereços de memória).

Podes verificar isso se fizeres id(bmax[0]) e id(board[0])

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ora como são listas de listas, o mais provável é que as listas internas estejas a ser copiadas de maneira não correcta.

Ou seja, apesar de ambas as listas serem diferentes (diferentes endereços de memória) os seus elementos são iguais (as listas internas tem os mesmos endereços de memória).

Podes verificar isso se fizeres id(bmax[0]) e id(board[0])

Très bien =)

Como é que se copia listas de listas correctamente em python, então? Parece ser uma linguagem tão acessível em que o programador não tem que se preocupar com os pormenores de base... de certeza tem uma forma elementar de copiar listas sem tanta chatice

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boa pergunta. Não sei :P

Experimenta usar o copy.deepcopy()

Python sucks =X

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Python sucks =X

Yep!

Mas o deepcopy funcionou ou não? Penso que serve para qualquer tipo de objectos, inclusive listas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora