associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Revisão 1e 2006-09-19 01:57:13

Excluir mensagem

OutrasSecoes / CommonGotchas

Aqui é uma página que irá prover uma discussão sobre os problemas mais comuns encontrado em Python que parecem deixar o usuário novato encucado (tá, o experiente também), juntamente da solução deles. São comumente chamados de 'gotchas', uma forma abreviada de 'got you'. Alguns lhe pegam de surpresa quando você está começando, outros são comportamentos esotéricos (jeito bonito de dizer 'bizarro') do Python.

Atribuição cria referências e não cópias

Isso pode ser um gotcha se você não entender como Python referencia variáveis.

   1 >>>L = [1,2,3]
   2 >>>M = ['X', L, 'Y'] # Coloca uma referência a L
   3 >>>M
   4 ['X', [1, 2, 3], 'Y']
   5 >>>L[1] = 0 # Muda M também
   6 >>>M
   7 ['X', [1, 0 ,3], 'Y']

Solução

Este efeito pode se tornar importante em programas grandes, e algumas vezes referências compartilhadas é exatamente o que você quer. Se não são, você pode evitar isso copiando-os explicitamente; para listas, você pode fazer um cópia top-level usando slice sem limites definido.

   1 >>>L = [1,2,3]
   2 >>>M = ['X', L[:], 'Y'] # Coloca uma cópia de L
   3 >>>M
   4 ['X', [1, 2, 3], 'Y']
   5 >>>L[1] = 0 # Só muda L, não M
   6 >>>M
   7 ['X', [1, 2 ,3], 'Y']
   8 >>>L
   9 [1, 0, 3]

Lembre-se, cópias top-level não copiam listas dentro de listas, por exemplo. Se quiser copiar uma estrutura destas, use o módulo copy padrão.

Repetição adiciona um nível de profundidade

Continua...