Python: Tipos de Sequência

Rafael Tardivo
rafaeltardivo
Published in
3 min readJun 16, 2018

Entendendo melhor a estrutura por trás das sequências mais usadas da linguagem.

Tipos de sequência

Existem dois tipos de sequência em Python: simples e container. É natural que pela praticidade do Python (e pela abundância de poder de processamento e memóriam RAM que nos é acessível) pouca gente se preocupe com o uso adequado de cada uma delas, certo? NOT TODAY!

Sequências simples

  • Armazenam itens de um só tipo de dado
  • Armazenam o valor de cada item em seu próprio espaço de memória

uma string (ou str em Python) é um exemplo de sequência simples:

color_model = 'RGB'

Neste caso, a porção de memória alocada para a variável color_modeltambém armazena os valores R, G e B, que como podemos observar, são do mesmo tipo (str).

Sequências container

  • Podem armazenar itens de diferentes tipos
  • Não armazenam o valor de seus itens em sí, mas sim suas referências

uma lista (ou list em Python) é um exemplo de sequência container:

some_list = ['R', 43, 5.0]

Observe que em uma mesma lista, estamos armazenando três tipos diferentes: str, int e float. Certo? ERRADO! Estamos na verdade armazenando a referência (ou ponteiro) de cada um dos itens. Vale lembrar que todos os tipos de dados do Python são objetos!

OBS: uma lista assim não faria muito sentido, considere a mistura de tipos um mal necessário para o exemplo!

Sequências mutáveis e imutáveis

As sequências também podem ser classificadas entre mutáveis e imutáveis. Sendo basicamente (explicando de maneira muitíssimo sucinta), alteráveis ou não após sua criação.

Sequências mutáveis

  • list, dict, set, byte array… Todas elas podem ser mudadas após a criação!

Podemos perfeitamente criar uma lista com três letras:

>>> letters = ['A', 'B', 'C']
>>> print(letters)
['A', 'B', 'C']

E modificá-la depois:

>>> letters.append('D')
>>> print(letters)
['A', 'B', 'C', 'D']

Sequências imutáveis

  • str, tuple, frozenset… Servem a propósitos diferentes e não podem ser alteradas após a criação!

Que burro! Dá zero pra ele! Eu altero strings direto! — Clarice Lispector

Pois é meu jovem, Não é bem assim… Sempre que você altera uma string, você está na verdade criando outra(s) string(s)!

Observe o id da string name:

>>> name = 'Paul'
>>> id(name)
140026338047680

agora, ao concatenaremos o sobrenome, o id da string name mudará:

>>> name += ' Gilbert'
>>> id(name)
140026338057712

Ou seja, você não alterou o mesmo objeto! Você criou outra String e atribuiu a referência dela à variável name! Além disso, uma terceira string é criada:

'Paul' # string original
'Gilbert' # string que será concatenada a string original
'Paul Gilbert' # string resultante

Agora, imagine um caso onde você precise concatenar 50 strings, diferentes! Coitada da memória RAM!

Quer entender um pouco mais sobre mutabilidade/imutabilidade? Tem um material bem bacana aqui:
https://medium.com/@meghamohan/mutable-and-immutable-side-of-python-c2145cf72747

Conclusão

Estude caso a caso qual sequência usar! Não só por questão de performance, mas também de semântica!

Cya ;)

--

--