Jump to content
icemonster2

[Resolvido] Declaração de variáveis depentendes de outras variáveis.

Recommended Posts

icemonster2

Isto é uma parte alterada de um dos meus programas:

possibilidades = []
lista = [(0,1)]
possibilidades.append(lista)
lista.append((1,1))

Eu esperava que a variável possibilidades ficasse com o valor [(0,1)] mas pelo que parece, fica com o valor [(0,1),(1,1)], embora a variável lista tenha sido adicionada à variável possibilidades antes sequer de acrescentar valores à lista. Já tenho uma ideia do porquê de isso acontecer mas não sei uma maneira alternativa para que a variável possibilidades seja independente da variável lista e mesmo assim adicionando os valores que estão na variável lista.

Cumprimentos, Ice_monster

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
pwseo

Experimenta utilizar o operador [:]:

possibilidades = []
lista = [(0,1)]
possibilidades.append(lista[:])
# ou entao:
possibilidades.append(list(lista))
lista.append((1,1))

(atenção: não testei)

Share this post


Link to post
Share on other sites
pwseo

De nada :)

Ontem não expliquei o motivo pelo qual as coisas funcionavam da forma que referiste (e normalmente costumo fazê-lo). Essencialmente, Python não copia arrays na sua totalidade quando tu atribuis uma array a um nome (variável). Na realidade, o que acontece é que esse nome passa a apontar para a array original (o que podes confirmar com a função id()). Isto significa que qualquer alteração que faças na array original afecte todos os nomes que apontam para ela porque afinal de contas, todos apontam para os mesmos dados.

Quando utilizas o operador [:] ou a função list() é criada uma array nova, uma verdadeira cópia da tua array original (que é o que pretendias fazer).

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.