How to Append to a Tuple in Python (5 Methods with Examples)

Every Python developer hits this wall at some point. You have a tuple, you need to add an element to it, and Python throws back a cold AttributeError: ‘tuple’ object has no attribute ‘append’.

Frustrating? Absolutely. But it’s fixable, and once you understand why tuples work the way they do, the solution makes complete sense.

In this guide, I’ll walk you through 5 practical methods to append elements to a tuple in Python, explain when to use each one, and show you a common gotcha that trips up even experienced developers. Whether you’re a beginner trying to get unstuck or someone who just wants to know the most Pythonic approach, you’re in the right place.

Why can’t You Just Use .append() on a Tuple?

Before we dive into the solutions, let me explain the “why” quickly.

Tuples in Python are immutable. That means once you create a tuple, its contents are locked; you cannot add, remove, or change elements directly. That’s actually the whole point of using a tuple. It’s Python’s way of saying: “this data shouldn’t change.”

cities = ("New York", "Chicago", "Houston")
cities.append("Phoenix")

# Output:
# AttributeError: 'tuple' object has no attribute 'append'

So when we talk about “appending to a tuple,” what we’re really doing is creating a brand-new tuple that includes all the original elements plus the new one. The original tuple stays untouched.

Now let’s look at how to do that.

Method 1: Use the + Operator (Simplest Approach)

This is the most simple way. You concatenate the original tuple with a new one-element tuple using the + operator.

cities = ("New York", "Chicago", "Houston")

updated_cities = cities + ("Phoenix",)
print(updated_cities)

# Output: ('New York', 'Chicago', 'Houston', 'Phoenix')

I executed the above example code and added the screenshot below.

Append to a Tuple in Python

Simple, readable, and works great for one-off additions.

The Trailing Comma Gotcha

This is the #1 mistake I see beginners make with this method. Pay close attention here.

cities = ("New York", "Chicago", "Houston")

# ❌ WRONG — this is just a string in parentheses, NOT a tuple
cities + ("Phoenix")
# TypeError: can only concatenate tuple (not "str") to tuple

# ✅ CORRECT — trailing comma makes it a tuple
cities + ("Phoenix",)

The trailing comma is what tells Python “this is a tuple.” Without it, (“Phoenix”) is just a string wrapped in parentheses. Always add that comma.

When to use this: Quick, one-time appends where readability matters most.

Method 2: The += Shorthand (Watch Out for This Gotcha!)

If you want a more compact version of the + operator, you can use +=. It looks like it modifies the tuple in place, but it doesn’t.

cities = ("New York", "Chicago", "Houston")

cities += ("Phoenix",)
print(cities)

# Output: ('New York', 'Chicago', 'Houston', 'Phoenix')

I executed the above example code and added the screenshot below.

How to Append to a Tuple in Python

This works, but there’s a subtle behavior that trips people up. Let me show you.

The Aliasing Problem

original = ("New York", "Chicago", "Houston")
alias = original # alias points to the same tuple

original += ("Phoenix",) # original now points to a BRAND NEW tuple
print(original) # ('New York', 'Chicago', 'Houston', 'Phoenix')
print(alias) # ('New York', 'Chicago', 'Houston') — unchanged!

See what happened? When you use +=, Python creates a new tuple and rebinds the variable original to it. But alias still points to the old tuple. If you have multiple variables referencing the same tuple, they won’t automatically update.

This is a real source of bugs, especially in larger codebases. Keep this in mind.

When to use this: Inline updates when you’re confident only one variable points to the tuple.

Read: Return a Tuple in Python

Method 3: Convert to a List, Append, Convert Back

This is the most flexible approach, especially when you need to add multiple elements or do conditional appends.

cities = ("New York", "Chicago", "Houston")

# Step 1: Convert to a list
cities_list = list(cities)

# Step 2: Append your element
cities_list.append("Phoenix")

# Step 3: Convert back to a tuple
cities = tuple(cities_list)

print(cities)
# Output: ('New York', 'Chicago', 'Houston', 'Phoenix')

I executed the above example code and added the screenshot below.

Append to Tuple in Python

You can also add multiple elements at once using .extend():

cities = ("New York", "Chicago", "Houston")

cities_list = list(cities)
cities_list.extend(["Phoenix", "San Antonio", "San Diego"])
cities = tuple(cities_list)

print(cities)
# Output: ('New York', 'Chicago', 'Houston', 'Phoenix', 'San Antonio', 'San Diego')

When to use this: When you need to append multiple elements, or when you’re building a tuple conditionally inside a block of logic. It’s also more efficient than using repeated + operators in a loop, because you convert once instead of creating a new tuple on every iteration.

Method 4: Python Unpacking Syntax * (Most Pythonic — Python 3.5+)

This one is my personal favorite for modern Python code. It’s clean, expressive, and handles both appending and prepending in a single line.

cities = ("New York", "Chicago", "Houston")
new_city = "Phoenix"

# Append to the end
updated_cities = (*cities, new_city)
print(updated_cities)
# Output: ('New York', 'Chicago', 'Houston', 'Phoenix')

# Prepend to the beginning
updated_cities = (new_city, *cities)
print(updated_cities)
# Output: ('Phoenix', 'New York', 'Chicago', 'Houston')

The * operator unpacks all elements from the original tuple into a new one. It reads naturally and handles multiple appends beautifully, too:

cities = ("New York", "Chicago", "Houston")

updated_cities = (*cities, "Phoenix", "San Antonio", "Dallas")
print(updated_cities)
# Output: ('New York', 'Chicago', 'Houston', 'Phoenix', 'San Antonio', 'Dallas')

When to use this: Any time you’re on Python 3.5 or higher (which is basically everyone today). This is the cleanest approach for single or multiple appends.

Method 5: Use collections.deque for Repeated Appends in a Loop

If you’re appending inside a loop — say, building up a tuple from a list of records — this is the approach to use for performance-sensitive code.

from collections import deque

cities = ("New York", "Chicago", "Houston")
d = deque(cities)

# Append to the end
d.append("Phoenix")

# Prepend to the beginning
d.appendleft("Los Angeles")

result = tuple(d)
print(result)
# Output: ('Los Angeles', 'New York', 'Chicago', 'Houston', 'Phoenix')

Here’s why this matters for performance. If you use the + operator inside a loop, Python creates a brand-new tuple on every single iteration:

# ❌ Slow — creates a new tuple on every loop iteration (O(n²))
cities = ("New York",)
new_cities = ["Chicago", "Houston", "Phoenix", "San Antonio"]

for city in new_cities:
cities = cities + (city,)

Each iteration copies all existing elements into a new tuple. For small data, you won’t notice. For large datasets, this becomes a serious bottleneck.

The deque.append() operation is O(1), constant time regardless of how many elements you’ve already added. Once you’re done, you convert to a tuple once at the end.

# ✅ Fast — append to deque in O(1), convert once at the end
from collections import deque

cities_deque = deque(("New York",))
new_cities = ["Chicago", "Houston", "Phoenix", "San Antonio"]

for city in new_cities:
cities_deque.append(city)

cities = tuple(cities_deque)
print(cities)
# Output: ('New York', 'Chicago', 'Houston', 'Phoenix', 'San Antonio')

When to use this: When you’re appending inside a loop or processing a large stream of data. For everyday single appends, the other methods are simpler.

How to Append Multiple Elements to a Tuple

You’ve seen a few ways to do this already, but let me pull them together in one place.

Using + operator:

pythoncities = ("New York", "Chicago", "Houston")
more_cities = ("Phoenix", "San Antonio", "Dallas")

result = cities + more_cities
print(result)
# Output: ('New York', 'Chicago', 'Houston', 'Phoenix', 'San Antonio', 'Dallas')

Using list conversion with .extend():

pythoncities = ("New York", "Chicago", "Houston")

cities_list = list(cities)
cities_list.extend(["Phoenix", "San Antonio", "Dallas"])
cities = tuple(cities_list)

print(cities)
# Output: ('New York', 'Chicago', 'Houston', 'Phoenix', 'San Antonio', 'Dallas')

Using * unpacking:

cities = ("New York", "Chicago", "Houston")
result = (*cities, "Phoenix", "San Antonio", "Dallas")

print(result)
# Output: ('New York', 'Chicago', 'Houston', 'Phoenix', 'San Antonio', 'Dallas')

Which Method Should You Use?

Here’s a quick reference to help you pick the right approach:

MethodBest ForCreates New Tuple?Python Version
+ operatorSimple one-off appendYesAll versions
+= operatorCompact inline updateYes (rebinds variable)All versions
List conversionMultiple or conditional appendsYesAll versions
* unpackingClean, modern code; prepend or appendYes3.5+
collections.dequeRepeated appends in loops, large dataYes (at end)All versions

My go-to recommendation: use * unpacking for everyday work. It’s the most readable and Pythonic. Fall back to list conversion when you need to append multiple items conditionally, and use deque When you’re inside a loop processing large data.

When You Should NOT Use a Tuple

This is something most tutorials skip, but I think it’s worth noting: if you’re regularly appending to a tupleyou probably shouldn’t be using a tuple in the first place.

Tuples are designed for data that doesn’t change, things like:

  • Database records where you’re storing a row (e.g., (“John Smith”, “Denver”, 45))
  • Fixed configuration values like (“localhost”, 5432)
  • Function return values where you want to guarantee the caller won’t accidentally modify the data
  • Dictionary keys that need to be hashable

If your data changes frequently, use a list. That’s exactly what lists are for. There’s no award for using a tuple when a list is the right tool.

Frequently Asked Questions

Does Python have a built-in append method for tuples?

No, it doesn’t. Tuples are immutable, so there’s no .append() method. To “append” to a tuple, you create a new tuple that includes the original elements plus the new ones.

What is the most Pythonic way to append to a tuple?

On Python 3.5 and above, the * unpacking method — (*original, new_element) — is the most Pythonic. It’s clean, readable, and works for both appending and prepending.

Can I append a tuple to another tuple?

Yes. Use the + operator to concatenate two tuples together:
tuple1 = (“New York”, “Chicago”)
tuple2 = (“Houston”, “Phoenix”)

result = tuple1 + tuple2
print(result)
# Output: (‘New York’, ‘Chicago’, ‘Houston’, ‘Phoenix’)

Why does ("Phoenix") cause a TypeError when I try to concatenate it?

Because (“Phoenix”) is just a string in parentheses — it’s not a tuple. You need a trailing comma: (“Phoenix”,). That comma is what makes Python treat it as a single-element tuple.

Is it bad for performance to append to a tuple in a loop?

Yes, if you’re using the + operator in a loop, it gets expensive quickly because Python creates a new tuple on every iteration. For loops, convert to a list or use collections.deque, then convert back to a tuple at the end.

Quick Recap

Here’s everything we covered:

  • Tuples are immutable — “appending” always means creating a new tuple
  • + operator — simple and readable for one-off appends, but don’t forget the trailing comma
  • += shorthand — compact, but watch out for the aliasing issue with multiple references
  • List conversion — best for multiple or conditional appends
  • * unpacking — cleanest and most Pythonic on Python 3.5+
  • collections.deque — the right choice when appending inside loops or processing large data
  • If you’re constantly appending, consider switching to a list instead of a tuple

You may also like to read:

51 Python Programs

51 PYTHON PROGRAMS PDF FREE

Download a FREE PDF (112 Pages) Containing 51 Useful Python Programs.

pyython developer roadmap

Aspiring to be a Python developer?

Download a FREE PDF on how to become a Python developer.

Let’s be friends

Be the first to know about sales and special discounts.