Introdução
Neste tutorial, exploraremos as variáveis Python, os endereços de memória e as diferenças entre os tipos de dados mutáveis e imutáveis:
- Tipos de dados imutáveis: Estes tipos de dados não podem ser alterados após a criação. Exemplos incluem
int,float,str,tupleefrozenset. - Tipos de dados mutáveis: Estes tipos de dados podem ser modificados após a criação. Exemplos incluem
list,dicteset.
Com tipos de dados imutáveis, quaisquer alterações resultam na criação de um novo objeto, enquanto os tipos de dados mutáveis podem ser modificados no local (in place). Compreender esta distinção é crucial ao trabalhar com endereços de memória e atribuição de variáveis.
Abordaremos a atribuição de variáveis, as características dos tipos de dados mutáveis e imutáveis e o operador is para comparar endereços de memória. Vamos começar!
Atribuição de Variáveis e Endereços de Memória
Em Python, as variáveis são apenas referências a localizações de memória onde os valores são armazenados. Quando você atribui um valor a uma variável, o Python cria um novo objeto (se necessário) e faz com que a variável se refira a esse objeto.
Abra o interpretador Python primeiro:
python
Vejamos um exemplo:
x = 10
y = x
Neste exemplo, a variável x recebe o valor 10. Quando atribuímos x a y, ambas as variáveis agora referenciam a mesma localização de memória. Podemos verificar isso usando a função id():
print(id(x)) ## Output: memory address of x
print(id(y)) ## Output: memory address of y, which should be the same as x
O Operador is
Em Python, o operador is compara os endereços de memória de dois objetos. Se os endereços de memória forem os mesmos, o operador is retorna True; caso contrário, retorna False. Isso é diferente do operador ==, que compara os valores dos objetos.
x = [1, 2, 3]
y = x
z = [1, 2, 3]
print(x is y) ## Output: True (x and y have the same memory address)
print(x is z) ## Output: False (x and z have different memory addresses)
Comparar Endereços de Memória
Nesta etapa, compararemos os endereços de memória de variáveis com o mesmo valor.
Siga as instruções abaixo:
## Crie duas variáveis inteiras `a` e `b` com o mesmo valor.
a = 10
b = 10
## Crie duas variáveis de lista `c` e `d` com os mesmos elementos.
c = [1, 2, 3]
d = [1, 2, 3]
## Compare os endereços de memória de `a` e `b`, bem como `c` e `d`.
print(a is b) ## Output: True
print(c is d) ## Output: False
No exemplo acima, criamos duas variáveis inteiras a e b com o mesmo valor.
Também criamos duas variáveis de lista c e d com os mesmos elementos.
Quando comparamos os endereços de memória de a e b, o operador is retornou True. Isso ocorre porque a e b compartilham o mesmo endereço de memória.
No entanto, quando comparamos os endereços de memória de c e d, o operador is retornou False. Isso ocorre porque c e d têm endereços de memória diferentes.
Então, o que isso significa?
- Tipos de dados imutáveis com o mesmo valor podem ter o mesmo endereço de memória.
- Tipos de dados mutáveis com o mesmo valor têm endereços de memória diferentes.
Modificando um Tipo de Dados Mutável
Em seguida, criaremos e modificaremos um tipo de dados mutável juntos.
## Crie duas variáveis `x` e `y` que referenciam a mesma lista.
x = [1, 2, 3]
y = x
## Modifique a lista usando a variável `x`.
x.append(4)
## Observe as mudanças na variável `y`.
print(y) ## Output: [1, 2, 3, 4] (y também reflete as mudanças porque x e y compartilham o mesmo endereço de memória)
Neste exemplo, criamos duas variáveis x e y que referenciam a mesma lista.
Quando modificamos a lista usando a variável x, as mudanças também foram refletidas na variável y. Isso ocorre porque x e y compartilham o mesmo endereço de memória.
Modificando um Tipo de Dados Imutável
Finalmente, vamos trabalhar juntos para modificar um tipo de dados imutável após o outro.
## Crie duas variáveis `a` e `b` que referenciam a mesma string.
a = "hello"
b = a
## Modifique a string usando a variável `a`.
a = a + ", world"
## Observe as mudanças na variável `b`.
print(b) ## Output: "hello" (b não muda porque um novo objeto foi criado ao modificar a string)
Neste exemplo, criamos duas variáveis a e b que referenciam a mesma string.
Quando modificamos a string usando a variável a, as mudanças não foram refletidas na variável b. Isso ocorre porque a e b têm endereços de memória diferentes.
Resumo
Neste tutorial avançado, nos aprofundamos nas variáveis Python e nos endereços de memória. Discutimos a atribuição de variáveis, tipos de dados mutáveis e imutáveis, e o operador is para comparar endereços de memória. Também praticamos esses conceitos com exercícios práticos. Compreender esses conceitos avançados o ajudará a se tornar um programador Python mais proficiente, pois fornece maior conhecimento sobre como o Python gerencia a memória e como as variáveis funcionam em um nível mais profundo.



