6.1 Variáveis — são referências
Em Python, as variáveis são referências para objetos, e não a própria variável. Isso significa que, quando você cria uma variável em Python, você está apenas criando uma referência a um objeto na memória.
Essa característica da linguagem tem importantes consequências para o trabalho com variáveis, especialmente ao passar objetos para funções ou ao atribuí-los a outras variáveis.
Quando você cria uma variável e atribui um valor a ela, o Python aloca um objeto na memória para esse valor e faz da variável uma referência para esse objeto. Se você atribuir uma variável a outra, a nova variável irá referenciar o mesmo objeto que a variável original. Isso significa que mudanças feitas através de uma variável se refletirão na outra, se o objeto for mutável.
Exemplo:
a = [1, 2, 3]
b = a
b.append(4)
print(a) # Saída: [1, 2, 3, 4]
Nós adicionamos o número 4 na variável b, mas ele foi adicionado também na lista na variável a, pois na verdade ambas as variáveis — são apenas referências para o objeto lista [1, 2, 3].
6.2 Objetos imutáveis
Em Python, os objetos são divididos em mutáveis e imutáveis. Objetos mutáveis, como listas e dicionários, podem ser modificados após a criação.
Objetos imutáveis, como strings e números, não podem ser alterados após a criação. Quando você trabalha com objetos imutáveis, as mudanças resultam na criação de um novo objeto:
A atribuição nunca muda um objeto:
a = 5 # a armazena uma referência para o objeto 5
b = a # b também armazena uma referência para o objeto 5
b = 3 # agora b armazena uma referência para o objeto 3
print(a) # Saída: 5
O objeto pode ser modificado chamando sua função:
a = [1, 2, 3]
b = a
b.append(4)
print(a) # Saída: [1, 2, 3, 4]
Mas há objetos imutáveis que possuem funções. Essas funções não alteram o objeto original, mas retornam um novo, que contém o novo resultado:
name = "Alex"
print(name) # Saída: Alex
name2 = name.lower()
print(name2) # Saída: alex
Strings — são objetos imutáveis. E embora possuam métodos, esses métodos nunca alteram o objeto de string — em vez disso, eles sempre retornam uma nova string (novo objeto). O objeto antigo permanece o mesmo.
6.3 Trabalhando com o tipo None
Em Python, há um tipo especial de dados que representa a ausência de valor — None. Ele é usado para indicar variáveis vazias ou como valor de retorno de funções que não retornam nada. Entender None é importante para gerenciar o comportamento do programa, especialmente no contexto de operadores condicionais e manipulação de dados.
Fundamentos do uso de None
None é a única instância da classe NoneType. Ele é usado para indicar que uma variável não tem valor. Nas condições, None é avaliado como falso (False).
a = None
if a:
print("a é verdadeiro")
else:
print("a é None ou False")
Comparando com None
Verificar uma variável para None deve ser feito usando o operador is, e não ==. O operador is verifica identidade, não igualdade de valores.
a = None
if a is None:
print("a é None")
else:
print("a tem valor")
None em funções
None é frequentemente usado em funções que não devem explicitamente retornar um valor. Se uma função não retorna valor, ela retorna implicitamente None.
def func():
print("Esta função retorna None")
result = func()
print(result) # Saída: None
None e listas
None pode ser usado em listas, tuplas ou outras coleções para indicar a ausência de um elemento em uma posição específica.
my_list = [1, None, 3]
print(my_list) # Saída: [1, None, 3]
GO TO FULL VERSION