Variáveis e Endereços de Memória

PythonBeginner
Pratique Agora

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, tuple e frozenset.
  • Tipos de dados mutáveis: Estes tipos de dados podem ser modificados após a criação. Exemplos incluem list, dict e set.

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?

  1. Tipos de dados imutáveis com o mesmo valor podem ter o mesmo endereço de memória.
  2. 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.