Universidade do Estado do Rio de Janeiro
Instituto de Química
Prof André Luís Alberton
Índice

Python Básico¶

Atribuição de variáveis¶

Como vimos, no python, temos os seguintes tipos de variáveis:

  • Números (int, float, complex)
  • Texto (str)
  • Booleanos (bool)
  • Listas (list)
  • Dicionários (dict)
  • Range (range)
  • Conjuntos (set)
  • Tuplas (tuple)

Na atribuição, atribui-se um valor à uma variável, o que quer dizer que um espaço da memória representado pela variável, armazenará o valor designado.

$$ \underbrace{a}_{\rm{nome \ da \ variável}} \leftarrow \rm{expressão} $$

Para atribuição:

  • 🆗 todo nome de variável deve iniciar com uma letra (a–z, A–Z) ou um sublinhado (_)
  • 🆗 o nome da variável pode conter letras, números e o caractere de sublinhado
  • ❌ Números não podem ser usados no início do nome (ex, 1a)
  • ❌ O nome não pode conter espaços nem caracteres especiais como hífens ou acentos (ex, var a).

O sinal de = é empregado para atribuição (mas não é equação).

Vale ressaltar que:

  • 1º - ele faz a conta da expressão

  • 2º - atribui o valor à variável

Na conta da expressão, ele pode usar a própria variável, caso já tenha um valor atribuído. Vejamos um exemplo:

Exemplo Faça a seguinte sequência

  • atribuia à variável ao valor de 'engenharia'
  • atribua à variável a o valor de a + 'eh legal'
  • imprima a variável a

Solução:

a = 'engenharia'
a = a + ' eh legal'
print(a)

O resultado será:

engenharia eh legal

Exemplo

1-) Faça a seguinte sequência:

  • Atribua à variável a o valor de 5.
  • Em seguida, faça a operação a $ \leftarrow $ a + 1.
  • Imprima a

Solução:

a = 5
a = a + 1
print(a)

Compartilhamento de referência no python¶

Em Python, para atribuição, é importante sabermos se são mutáveis ou não. Ao definir:

a = define-se algum tipo de variável
b = a

Ao mudar b, se houver compartilhamento de referência, a também muda, pois ambas estão associadas ao mesmo espaço de memória. As variáveis mutáveis irão compartilhar a referência, enquanto para as imutáveis inicialmente há compartilhamento de referência, mas ao mudar a variável b, ele cria uma cópia da variável em outro espaço da memória; assim, a não muda.

As variáveis mutáveis e imutáveis estão ilustradas a seguir.

Compartilhamento de Referência no Python
Tipos de variáveis Comportamento
list, dict, set, bytearray Modificar b também modifica a
int, float, bool, str, tuple, frozenset, range Compartilha referência inicialmente; mudança cria novo objeto

Para se evitar o compartilhamento de referências, deve-se fazer uma cópia da variável. Há algumas formas de fazê-lo:

1. Usar .copy() (para listas, dicionários e conjuntos)

Cria uma cópia rasa (cópia de 1º nível):

# para listas
lista = [1, 2, 3]
copia = lista.copy()

# para dicionários
dicionario = {"a": 1, "b": 2}
copia = dicionario.copy()

# para conjuntos
conjunto = {1, 2, 3}
copia = conjunto.copy()

*2. Usar list(), dict(), set() para recriar o objeto

# para listas
lista = [1, 2, 3]
copia = list(lista)

# para dicionários
dicionario = {"a": 1}
copia = dict(dicionario)

# para conjuntos
conjunto = {1, 2}
copia = set(conjunto)

3. Usar deepcopy para objetos aninhados

Se o objeto tem estruturas internas mutáveis (listas dentro de listas, dicionários dentro de listas, etc.), você precisa de uma cópia profunda.

import copy

lista = [[1, 2], [3, 4]]
copia = copy.deepcopy(lista)

Assim, até os objetos internos são copiados independentemente.

Outras formas de atribuição no Python¶

Atribuição simples¶

Uma atribuição simples refere-se

x = 10
nome = "Ana"
Atribuição múltipla¶

Esta forma atribui vários valores de uma só vez, conforme ilustrado a seguir:

a, b = 1, 2
Atribuição com troca de valores¶

Tendo variáveis ae b já conhecidas, pode-se trocar os valores das variáveis com o código a seguir:

a, b = b, a
Desempacotamento de iteráveis¶

Atribui elementos de variáveis iteráveis. As principais variáveis iteráveis são list, tuple, str, set, frozenset, dict e range. Pode-se desempacotar as variáveis como os exemplos que seguem:

# para listas
valores = [1, 2, 3]
x, y, z = valores

# para strings
valores = "abc"
a, b, c = valores

# para conjuntos. Neste caso, a,b,c não necessariamente respeitam a ordem 7,8,9, pois conjuntos não guardam ordem de elementos
valores = {7, 8, 9}
a, b, c = valores

# para conjuntos ordenados
valores = frozenset([10, 11, 12])
a, b, c = valores

# para dicionários (neste caso, o que se retorna é a chave do dicionário)
valores = {"x": 100, "y": 200, "z": 300}
a, b, c = valores

print(a)  # 'x'
print(b)  # 'y'
print(c)  # 'z'

# tuplas
valores = (4, 5, 6)
a, b, c = valores

# para ranges
valores = range(1, 4)
a, b, c = valores

print(a)  # 1
print(b)  # 2
print(c)  # 3
Atribuição em cadeia¶

Pode-se atribuir um mesmo valor à várias variáveis de uma só vez.

x = y = z = 0