Variavel: O que É e Como Funciona | Python Brasil
Entenda variaveis em Python: criacao, tipos, escopo, convencoes de nomenclatura, tipagem dinamica e boas praticas para gerenciar dados no seu codigo.
O que e uma Variavel?
Uma variavel em Python e um nome que faz referencia a um objeto na memoria. Diferente de linguagens como C ou Java, onde variaveis sao “caixas” que armazenam valores, em Python variaveis sao rotulos (labels) que apontam para objetos. Essa distincao e fundamental para entender o comportamento da linguagem, especialmente quando se trabalha com objetos mutaveis.
Python utiliza tipagem dinamica, o que significa que voce nao precisa declarar o tipo de uma variavel — o tipo e determinado automaticamente pelo valor atribuido e pode mudar ao longo da execucao do programa.
Como Criar Variaveis
# Atribuicao simples
nome = 'Maria'
idade = 30
altura = 1.68
ativo = True
# Atribuicao multipla
x, y, z = 1, 2, 3
a = b = c = 0
# Troca de valores (Pythonic)
x, y = y, x # troca x e y sem variavel temporaria
# Desempacotamento
primeiro, *meio, ultimo = [1, 2, 3, 4, 5]
print(primeiro) # 1
print(meio) # [2, 3, 4]
print(ultimo) # 5
Tipagem Dinamica
Em Python, o tipo pertence ao objeto, nao a variavel. A mesma variavel pode referenciar objetos de tipos diferentes ao longo do programa.
valor = 42 # int
print(type(valor)) # <class 'int'>
valor = 'Python' # agora e str
print(type(valor)) # <class 'str'>
valor = [1, 2, 3] # agora e list
print(type(valor)) # <class 'list'>
# Verificando tipos
x = 3.14
print(isinstance(x, float)) # True
print(isinstance(x, (int, float))) # True — aceita tupla de tipos
Convencoes de Nomenclatura
O PEP 8, guia de estilo oficial do Python, define convencoes claras para nomes de variaveis.
# Variaveis e funcoes: snake_case
nome_completo = 'Ana Silva'
total_de_itens = 42
taxa_de_juros = 0.05
# Constantes: UPPER_SNAKE_CASE
PI = 3.14159265
MAX_CONEXOES = 100
URL_BASE = 'https://api.exemplo.com'
# Classes: PascalCase
# class MinhaClasse:
# Variaveis "privadas": prefixo com underscore
_variavel_interna = 'uso interno'
__variavel_name_mangling = 'name mangling ativo'
# Variavel descartavel
for _ in range(5):
print('repetindo')
# Nomes reservados — evitar conflito com builtins
lista_ = [1, 2, 3] # underscore no final para evitar conflito com list
tipo_ = 'exemplo' # evita conflito com type
Escopo de Variaveis
O escopo define onde uma variavel pode ser acessada. Python segue a regra LEGB.
# Escopo global
mensagem_global = 'Sou global'
def exemplo_escopo():
# Escopo local
mensagem_local = 'Sou local'
print(mensagem_global) # acessa variavel global
print(mensagem_local) # acessa variavel local
exemplo_escopo()
# print(mensagem_local) # NameError! Nao existe fora da funcao
# Palavra-chave global
contador = 0
def incrementar():
global contador
contador += 1
incrementar()
incrementar()
print(contador) # 2
# Palavra-chave nonlocal
def externa():
valor = 10
def interna():
nonlocal valor
valor += 5
interna()
return valor
print(externa()) # 15
Referencia vs Valor
Em Python, variaveis sempre guardam referencias a objetos. Para tipos imutaveis, o efeito pratico e semelhante a passagem por valor. Para tipos mutaveis, e essencial entender as implicacoes.
# Com imutaveis — comportamento "seguro"
a = 10
b = a
b += 5
print(a) # 10 — a nao foi afetado
# Com mutaveis — cuidado!
lista_a = [1, 2, 3]
lista_b = lista_a # ambas apontam para o MESMO objeto
lista_b.append(4)
print(lista_a) # [1, 2, 3, 4] — lista_a tambem mudou!
# Para criar uma copia independente
lista_c = lista_a.copy()
lista_c.append(5)
print(lista_a) # [1, 2, 3, 4] — lista_a nao foi afetada
# Verificando identidade
print(lista_a is lista_b) # True — mesmo objeto
print(lista_a is lista_c) # False — objetos diferentes
print(lista_a == lista_c[:4]) # True — mesmo conteudo
Anotacoes de Tipo
Embora a tipagem seja dinamica, o Python permite anotacoes de tipo para documentacao e ferramentas de analise estatica.
# Anotacoes de tipo (nao alteram o comportamento em runtime)
nome: str = 'Ana'
idade: int = 28
notas: list[float] = [9.5, 8.0, 7.5]
config: dict[str, str] = {'host': 'localhost', 'porta': '8080'}
# Tipos opcionais
from typing import Optional
resultado: Optional[str] = None # pode ser str ou None
# A partir do Python 3.10
def buscar(id: int) -> str | None:
pass
Variaveis de Ambiente
Para configuracoes sensiveis como senhas e chaves de API, utilize variaveis de ambiente.
import os
# Lendo variaveis de ambiente
database_url = os.environ.get('DATABASE_URL', 'sqlite:///local.db')
debug = os.environ.get('DEBUG', 'False').lower() == 'true'
api_key = os.getenv('API_KEY') # retorna None se nao existir
# Com python-dotenv para carregar de arquivo .env
# pip install python-dotenv
from dotenv import load_dotenv
load_dotenv()
secret = os.getenv('SECRET_KEY')
Erros Comuns
O erro mais comum e assumir que atribuicao cria uma copia, quando na verdade cria uma referencia ao mesmo objeto — particularmente perigoso com listas e dicionarios. Outro erro frequente e usar nomes de variaveis que conflitam com builtins do Python, como list, dict, type ou id, o que sobrescreve a funcao original. Tambem e comum referenciar uma variavel antes de atribui-la, especialmente dentro de funcoes onde o Python interpreta a variavel como local se houver atribuicao em qualquer ponto da funcao.
Boas Praticas
Use nomes descritivos que revelem a intencao: quantidade_de_alunos e muito melhor que qa. Siga as convencoes do PEP 8 consistentemente. Evite variaveis globais — elas dificultam testes e tornam o fluxo do programa imprevisivel. Use anotacoes de tipo para melhorar a legibilidade e permitir verificacao estatica com ferramentas como mypy. Nunca armazene segredos diretamente no codigo — use variaveis de ambiente ou gerenciadores de segredos.
Quando Usar
Variaveis sao o mecanismo fundamental para armazenar e manipular dados em qualquer programa Python. Entender como funcionam referencias, escopo e tipagem dinamica e essencial para evitar bugs sutis e escrever codigo robusto.