--- title: The Tuples localeTitle: As tuplas --- ## As tuplas Uma tupla é uma sequência de objetos Python. As tuplas são imutáveis, o que significa que não podem ser modificadas após a criação, ao contrário das listas. **Criação:** Uma `tuple` vazia é criada usando um par de parênteses, `()` : ```shell >>> empty_tuple = () >>> print(empty_tuple) () >>> type(empty_tuple) >>> len(empty_tuple) 0 ``` Uma `tuple` com elementos é criada ao separar os elementos com vírgulas (os parêntesis circundantes, `()` são opcionais com exceções): ```shell >>> tuple_1 = 1, 2, 3 # Create tuple without round brackets. >>> print(tuple_1) (1, 2, 3) >>> type(tuple_1) >>> len(tuple_1) 3 >>> tuple_2 = (1, 2, 3) # Create tuple with round brackets. >>> print(tuple_2) (1, 2, 3) >>> tuple_3 = 1, 2, 3, # Trailing comma is optional. >>> print(tuple_3) (1, 2, 3) >>> tuple_4 = (1, 2, 3,) # Trailing comma in round brackets is also optional. >>> print(tuple_4) (1, 2, 3) ``` Uma `tuple` com um único elemento deve ter a vírgula final (com ou sem colchetes): ```shell >>> not_tuple = (2) # No trailing comma makes this not a tuple. >>> print(not_tuple) 2 >>> type(not_tuple) >>> a_tuple = (2,) # Single element tuple. Requires trailing comma. >>> print(a_tuple) (2,) >>> type(a_tuple) >>> len(a_tuple) 1 >>> also_tuple = 2, # Round brackets omitted. Requires trailing comma. >>> print(also_tuple) (2,) >>> type(also_tuple) ``` Colchetes são necessários em casos de ambigüidade (se a tupla fizer parte de uma expressão maior): > Note que na verdade é a vírgula que faz uma tupla, não os parênteses. Os parênteses são opcionais, exceto no caso da tupla vazia, ou quando são necessários para evitar ambigüidade sintática. Por exemplo, `f(a, b, c)` é uma chamada de função com três argumentos, enquanto `f((a, b, c))` é uma chamada de função com uma 3-tupla como o único argumento. ```shell >>> print(1,2,3,4,) # Calls print with 4 arguments: 1, 2, 3, and 4 1 2 3 4 >>> print((1,2,3,4,)) # Calls print with 1 argument: (1, 2, 3, 4,) (1, 2, 3, 4) >>> 1, 2, 3 == (1, 2, 3) # Equivalent to 1, 2, (3 == (1, 2, 3)) (1, 2, False) >>> (1, 2, 3) == (1, 2, 3) # Use surrounding round brackets when ambiguous. True ``` Uma `tuple` também pode ser criada com o construtor da `tuple` : ```shell >>> empty_tuple = tuple() >>> print(empty_tuple) () >>> tuple_from_list = tuple([1,2,3,4]) >>> print(tuple_from_list) (1, 2, 3, 4) >>> tuple_from_string = tuple("Hello campers!") >>> print(tuple_from_string) ('H', 'e', 'l', 'l', 'o', ' ', 'c', 'a', 'm', 'p', 'e', 'r', 's', '!') >>> a_tuple = 1, 2, 3 >>> b_tuple = tuple(a_tuple) # If the constructor is called with a tuple for the iterable, >>> a_tuple is b_tuple # the tuple argument is returned. True ``` **Acessando elementos de uma `tuple` :** Elementos de `tuples` são acessados ​​e indexados da mesma maneira que as `lists` . ```shell >>> my_tuple = 1, 2, 9, 16, 25 >>> print(my_tuple) (1, 2, 9, 16, 25) ``` _Zero indexado_ ```shell >>> my_tuple[0] 1 >>> my_tuple[1] 2 >>> my_tuple[2] 9 ``` _Envolva a indexação_ ```shell >>> my_tuple[-1] 25 >>> my_tuple[-2] 16 ``` **Embalagem e Desembalagem:** A declaração `t = 12345, 54321, 'hello!'` é um exemplo de empacotamento de tupla: os valores `12345` , `54321` e `'hello!'` são embalados juntos em uma tupla. A operação inversa também é possível: ```shell >>> x, y, z = t ``` Isso é chamado, apropriadamente, de descompactação de seqüência e funciona para qualquer sequência do lado direito. A descompactação de sequências requer que haja tantas variáveis ​​no lado esquerdo do sinal de igual quanto há elementos na sequência. Observe que a atribuição múltipla é realmente apenas uma combinação de empacotamento de tupla e descompactação de sequência. ```shell >>> t = 1, 2, 3 # Tuple packing. >>> print(t) (1, 2, 3) >>> a, b, c = t # Sequence unpacking. >>> print(a) 1 >>> print(b) 2 >>> print(c) 3 >>> d, e, f = 4, 5, 6 # Multiple assignment combines packing and unpacking. >>> print(d) 4 >>> print(e) 5 >>> print(f) 6 >>> a, b = 1, 2, 3 # Multiple assignment requires each variable (right) have a matching element (left). Traceback (most recent call last): File "", line 1, in ValueError: too many values to unpack (expected 2) ``` **Imutável:** `tuples` são contêineres imutáveis, garantindo **que os** objetos que contêm não serão alterados. Ele **não** garante que os objetos que contém não mudará: ```shell >>> a_list = [] >>> a_tuple = (a_list,) # A tuple (immutable) with a list (mutable) element. >>> print(a_tuple) ([],) >>> a_list.append("Hello campers!") >>> print(a_tuple) # Element of the immutable is mutated. (['Hello campers!'],) ``` **Usos:** Funções só podem retornar um único valor, no entanto, uma `tuple` heterogênea pode ser usada para retornar vários valores de uma função. Um exemplo é a função de `enumerate` interna que retorna um iterável de `tuples` heterogêneas: ```shell >>> greeting = ["Hello", "campers!"] >>> enumerator = enumerate(greeting) >>> enumerator.next() >>> enumerator.__next__() (0, 'Hello') >>> enumerator.__next__() (1, 'campers!') ``` ### Mais Inforamtion: [Documentos em Python - Tuplas](https://docs.python.org/3/library/stdtypes.html#tuples)