Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Muita gente cai na pegadinha de que reatribuir uma lista dentro de uma função não afeta a lista original, mas na prática ela altera sim se você usar métodos que modificam a lista.
O grande ponto é que, em Python, passar uma lista para uma função é passar uma referência a esse objeto, não uma cópia. Então, se você modificar a lista usando métodos como append ou extend, ela muda lá fora.
Por outro lado, se você fizer uma reatribuição, tipo items = ["x", "y"], você só troca a referência local dentro da função, e a lista original fica intacta. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Exemplo prático:
def add_item(items):
items.append("new") # Modifica a lista original
def replace_item(items):
items = ["x", "y"] # Só troca a referência local Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
data = ["a", "b"]
add_item(data)
print(data) # ['a', 'b', 'new'] Esse contexto ajjuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
replace_item(data)
print(data) # ['a', 'b', 'new']
No seu entendimento, o que mais causa confusão na hora de entender passagem por referência em Python? Será que é só questão de entender o que é uma referência mesmo? A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Na UI isso pesa bastante, principalmente quando a lista de elementos é grande e a gente precisa fazer muitas operações. Às vezes, a confusão vem do impacto na performance se a gente não controla bem as referências.
Esse ponto é clássico, na minha equipe a gente sempre reforça que entender o que é uma referência ajuda demais na hora de evitar bugs com mutabilidade. Pode parecer bobeira, mas faz toda a diferença na manutenção de sistemas legados.
Exato, e muitas vezes a gente acaba usando cópias por preguiça de pensar na referência. Mas aí depois se perde na complexidade.
Na minha experiência, entender esse ponto ajuda a criar funções mais previsíveis. Já passei por situações onde reatribuição causou bugs difíceis de rastrear. Acho que é questão de prática mesmo.