Geekflare is supported by our audience. We may earn affiliate commissions from buying links on this site.
In Development Last updated: April 14, 2023
Share on:
Invicti Web Application Security Scanner – the only solution that delivers automatic verification of vulnerabilities with Proof-Based Scanning™.

Tuple is a built-in data type in Python that is used to store a collection of data. It is similar to a list but is slightly faster.

However, its limitations make lists more desirable in some situations. In this article, I will explain everything you need to know to get started using tuples.

What Is a Tuple?

As mentioned earlier, a tuple is one of the built-in data types in Python used to store collections of data. It is similar to a Python list in that it stores data in an iterable, array-like format. Unlike a list, however, a tuple is immutable. That is, once created, its values cannot be changed.

Additional elements cannot be added, and existing elements cannot be removed. A tuple, therefore, is ideal when storing data that does not change. It may even be a collection of data of different types. In the next section, we will discuss the different ways of creating tuples in Python.

How to Create a Tuple in Python?

There are at least three ways to create tuples in Python. In this section, we will cover three of the most common methods you will likely use and see when reading code from others.

To run the following code examples, you will need to have Python installed. If you do not have Python already installed, here’s a helpful guide to installing Python. Alternatively, you can run your code in an online Python runtime like Google Colab.

#1. Using the Tuple Literal (Parentheses)

The most common way to see tuples defined in Python is by placing a collection of values between parentheses. These values are separated by commas. The following example illustrates this method:

# Creates a tuple by placing values between parentheses
values = (1, 2, 3)

# Printing out the tuple to the screen

# Printing out the type of values variable

Running this code will produce the following:

An example illustrating creating tuples using the tuple literal in Python

As you can see from the output, the tuple holds the values we initialized it with. It is also of type <class 'tuple'>.

When you create tuples in Python, parentheses are not necessary. Therefore this values = 1, 2, 3 is equally as valid as this values = (1, 2, 3). It is, however, recommended that you use parentheses to make your code more understandable.

Creating tuples with one element in Python is a little bit tricky. Instead of just placing one element between parentheses, you also need to add a trailing comma. Here is an example to illustrate:

# Without trailing comma, this won't create a tuple
not_a_tuple = (1)

# With trailing comma, this will create a tuple
a_tuple = (1,)

# Printing not_a_tuple

# Printing not_a_tuple's data type

# Printing a_tuple

# Printing a_tuple's data type

Running the code above, you will see that not_a_tuple becomes an int of value 1. This is important to keep in mind when creating tuples.

#2. Using the Constructor Function

The second method for creating tuples in Python uses the tuple constructor function. In this method, you call the function, passing an iterable object like a list as an argument. This will be converted to a tuple. Here is an example:

# Creating tuple from a list of values
values = tuple([1, 2, 3])

# Printing out the values

# Printing out the data type of the values identifier

As you can see, using the function achieves the same result as using the literal. However, the function enables you to create a tuple based on a dynamic value, such as a list whose values are only known at runtime. With the first method, you would have to know the values or identifiers that make up your tuple while writing the code.

#3. Creating an Empty Tuple

As you work with tuples in your code, you may need to create empty tuples. Empty tuples are created as you would expect. You can use either the tuple constructor or the literal to when creating them. Here is an example demonstrating how to use either method:

# Using the tuple literal
empty_tuple_1 = ()

# Using the constructor
empty_tuple_2 = tuple()

Empty tuples are useful when representing an empty set of results. Consider the following function:

def create_range(start, end):
    return tuple(range(start, end))

This function creates a tuple with values from the start, up to the end value you pass in. If you wanted to iterate over the results of the function you would use something like this:

my_values = create_range(0, 5)

for value in my_values:

If you provided 5 and 5 to the create_range function, the result would be an empty tuple. And if you tried to iterate over it, you would just have zero iterations, and your code would proceed as normal.

On the other hand, if there were no empty tuples, and instead you got the None value, then trying to iterate over it would throw an error. To prevent crashing the program, you would have to implement a test for the edge case that the create_range function returns None or any other value that represents an empty tuple.

This would lead to messy code. Ideally, you would want to avoid special cases as much as possible. This means the return value of all functions should have an identical interface so that your code works in the general case as much as possible. In this case, this means returning a tuple all the time, although, at times, it will be empty.

How to Access Elements

There are two ways to access a tuple’s elements in Python. The first method is by index, and the second is by destructuring the elements. First, we will examine how to access elements by index.

Accessing Elements by Index

Accessing elements by the index is similar to how you would access list elements by index. This is done using square-bracket notation. Tuples use a zero-based indexing system meaning the first element is index 0, and the one after is index 1 until the last element.

The example below demonstrates how to access elements by index:

# Creating a tuple
values = (1, 2, 3, 4)

# Accessing the first element
first_element = values[0]

# Accessing the fourth element(index 3)
fourth_element = values[3]

You can also use negative indexing. The element with index -1 is the last element, and the element with index -2 is the second from the last element.

# Creating the tuple
values = (1, 2, 3, 4)

# Accessing the last element
last_element = values[-1]

# Accessing the second from last element
second_from_last_element = values[-2] 

In addition, you can also access subcollections of elements from a tuple by slicing it. This is similar to how you would slice a list. The notation is as follows <tuple>[<start>: <end>: <skip>]. The following example demonstrates slicing:

# Creating the tuple
values = (1, 2, 3, 4, 5, 6, 7)

# Getting the first three elements
values[1: 3]

# Getting every other element

Iterating Over Elements

A tuple is an iterable object in Python. Therefore you can iterate over its elements using a for loop, as shown in the following example:

values = (1, 2, 3, 4)

for value in values:

This method of accessing elements is ideal when you want to access all the elements in the tuple.

Accessing Elements by Destructuring

To explain destructuring, consider the following scenario where we are trying to get the different elements in a tuple.

# Creating the tuple to record a user's information
person_record = (1, 'John Doe', '')

# Accessing the different elements in the tuple to use in our code
id = person_record[1]
name = person_record[2]
email = person_record[3]

Python allows us to use a more convenient method to access the values, as illustrated below:

# Creating the tuple to record a user's information
person_record = (1, 'John Doe', '')

id, name, email = person_record

This is called destructuring. That is the first variable, id in this case, will be assigned the first value in the tuple and the second variable to the second element. This goes on to the end of the tuple. The above example is equivalent to this:

id, name, email = (1, 'John Doe', '')

In this case, instead of storing the tuple in a variable, we are immediately destructuring it. When you combine this with the knowledge that you do not need to use parentheses when creating tuples, then you can write the code like this.

id, name, email = 1, 'John Doe', ''

At the end of all this, you will have id, name, and email variables with the values 1, ‘John Doe’ and ‘’. This is a convenient and succinct way of creating variables in Python that you will see in production code. It helps to know that at the heart of this elegant syntax is the concept of tuples.

Differences Between Tuple and List

While the two are similar, some key differences make each one more suited for a particular use case. Understanding these differences will help you decide on the best data type to use and write better and more efficient code.

Memory StorageStored in contiguous memoryStore in different parts of memory
MutabilityImmutable (cannot be changed)Mutable (can be changed)
SpeedAccess is fasterAccess is slower
Data typeUsually stores data of different typesUsually stores data of the same type
Use casesUsually used to store a collection of similar values, such as marks.Usually used to store a collection of similar values such as marks.

Advantages of a Tuple

#1. It Is Faster

Because of how the values of a tuple are stored in contiguous memory, accessing the values is faster compared to a list. However, because once created, they cannot be changed, tuples are not always the best data structure to use to store collections of values.

Their ideal use case is storing lots of data in memory that does not change but will be accessed several times during program execution. In this case, your program will benefit immensely from the performance boost of tuples.

#2. Return Multiple Values

You can use tuples to return multiple values from a function and destructuring the result. For example:

from random import randint

def create_two_numbers():
    first_num = randint(0, 9)
    second_num = randint(0, 9)

    return first_num, second_num

first_num, second_num = create_two_numbers()

In this example, we have a function that creates two random numbers and returns them both in a tuple. The return first_num, second_num statement is equivalent to writing return (first_num, second_num). This is because parentheses are optional when creating tuples. To access the result, we are destructuring it.

#3. Values are Write-Protected

Tuples are immutable once created. They are, therefore, ideal for storing data in memory that does not change during program execution. They ensure that you do not accidentally overwrite the data somewhere else in your code.

#4. Store Multiple Data Types

Tuples allow you to store values of multiple data types. This allows you to create records of data, such as storing a user’s details in a tuple. You can also store more complicated items such as functions, dictionaries, other tuples, and even lists.

Common Tuple Methods

#1. count()

The tuple object contains the count method, which counts the number of times an element occurs. For example:

# Creating a tuple with several numbers
values = (1, 2, 3, 4, 5, 4, 4, 6)

# Counting the number of fours
n_fours = values.count(4)

# Prining out the number of fours

From this example, we can see that the number 4 occurs exactly three times in our tuple.

#2. index()

The index method can be used to find the index of the first occurrence of a value in a tuple. If the value does not exist, an ValueError exception will be thrown. Here is some code to illustrate how the index method works:

# Creating a tuple with several numbers
values = (1, 2, 3, 4, 5, 4, 4, 6)

# Search for index of 4
index_of_four = values.index(4)
print("Index of four:", index_of_four)

# Search for index of 9
index_of_nine = values.index(9)
print("Index of nine:", index_of_nine)

And when we run the code above, this is the output:


In this case, the index of 4 is 3, and the code ran without issues. But when it came to finding the index of 9, the program raised an exception. It is important to handle such exceptions when you are writing Python programs that use the index method.

#3. len()

Like all iterable objects in Python, tuples have a length property that you can access when you pass in the tuple as an argument to the len() function.

# Creating a tuple
values = (1, 2, 3, 4)

# Getting the length
length = len(values)

# Print the output

This is the result of running the above code.

#4. min() and max()

The min and max methods work by looping through each element in an iterable and comparing if it is greater or less than the one before it. In the end, max will return the largest element in the iterable while min returns the smallest.

With numbers, the operation is obvious. With strings, Python will use alphabetic order. The smallest word, returned by min, is the first word if the strings were written in alphabetic order. While the largest word is the last word. If the iterable contains a mix of different data types, then the operations will both fail because Python does not know how to compare different data types.

Here is a code example:

# Creating tuple with values
values = (1, 2, 3, 4, 5)

# Getting the largest value
largest = max(values)

# Getting the smallest value
smallest = min(values)

# Output the results

#5. sorted()

The sorted function in Python takes in an iterable object and returns a list of the elements sorted. You can call the sorted function, pass in a tuple as an argument, and get the elements of the tuple sorted in a list. To convert the sorted list to a tuple, you can use the constructor function. Here’s an example:

# Creating a tuple with values in random order
values = (1, 5, 3, 3, 2, 4)

# Using sorted to sort the values into a list
sorted_list = sorted(values)

# Converting the list into a tuple
sorted_tuple = tuple(sorted_list)

# Printing the output

#6. Adding and Multiplying Tuples

The addition operation on two tuples simply concatenates them together. The multiplication operation repeats the elements of a tuple as many times as the value you multiplied with. Here is an example to illustrate the two examples.

# Create a tuple with some values
values = (1, 2, 3, 4, 5)

# Create a new tuple using addition
added = values + values

# Create a new tuple using multiplication
multiplied = values * 2

print("values + values =", added)
print("values * 2 =", multiplied)

Final Words

In this article, you learned that:

  • Tuples are list-like objects used for storing collections of values.
  • Unlike lists, they are immutable.
  • They are faster and more efficient than lists.
  • They can be constructed using parentheses and separating the values with commas.
  • They can also be constructed using the tuple constructor function.
  • You can access individual values using a zero-based index system.
  • You can also destructure values from the tuple.
  • You can also iterate over values using a for-loop.
  • The different methods that you can use with a tuple.

Next, you may want to check out more Python content, such as Python List Methods and Python Dictionary Methods.

  • Anesu Kafesu
    Full stack web developer and technical writer. Currently learning AI.
Thanks to our Sponsors
More great readings on Development
Power Your Business
Some of the tools and services to help your business grow.
  • Invicti uses the Proof-Based Scanning™ to automatically verify the identified vulnerabilities and generate actionable results within just hours.
    Try Invicti
  • Web scraping, residential proxy, proxy manager, web unlocker, search engine crawler, and all you need to collect web data.
    Try Brightdata
  • is an all-in-one work OS to help you manage projects, tasks, work, sales, CRM, operations, workflows, and more.
    Try Monday
  • Intruder is an online vulnerability scanner that finds cyber security weaknesses in your infrastructure, to avoid costly data breaches.
    Try Intruder