Quick answer: The error occurs when Python evaluates parentheses after a list, as in values(0), because a normal list is a container rather than a callable. Use square brackets for indexing, call a real function when a calculation is intended, and inspect the variable immediately before the failing expression for accidental name shadowing.

TypeError: 'list' object is not callable means Python found a list where your code tried to call something with parentheses. In practice, the error usually comes from one of two mistakes: a variable named list shadows Python’s built-in list() constructor, or code uses parentheses instead of square brackets to access a list item.
Quick Fix
Check the line in the traceback where the error is raised. If the code looks like items(0), change it to items[0]. If the code tries to call list(...) after assigning a variable named list, rename the variable and rerun the program from a clean interpreter session.
items = ["Python", "NumPy", "Pandas"]
# Wrong: parentheses call the object.
# first = items(0)
# Right: square brackets index the list.
first = items[0]
print(first)
Python lists are documented as built-in sequence types in the official list documentation. They support indexing, slicing, appending, popping, and iteration, but a normal list is not a function.
Cause 1: Naming a Variable list
The name list is also Python’s built-in constructor for creating lists. The official list() documentation lists it with the built-in functions and types. If you reuse that name for your own variable, later calls to list() will try to call your variable instead of the built-in constructor.
text = "Python"
list = ["already", "a", "list"]
# This raises: TypeError: 'list' object is not callable
letters = list(text)
print(letters)
The fix is simple: choose a descriptive variable name such as items, names, rows, or letters. If you made this mistake in a notebook or REPL, restart the kernel or delete the shadowing name before testing again.
text = "Python"
items = ["already", "a", "list"]
letters = list(text)
print(items)
print(letters)
Using clear names also makes list operations easier to read. For related list basics, see Python list length, list pop, and checking whether a list is empty.

Cause 2: Using Parentheses for Indexing
Parentheses call a callable object. Square brackets access an item by index. The Python data model explains callable behavior through __call__; built-in list instances do not become callable just because they contain data.
scores = [91, 84, 76]
# Wrong: scores(1)
second_score = scores[1]
last_score = scores[-1]
print(second_score)
print(last_score)
If the index is wrong, Python raises a different error: IndexError. Our guide to Python list index out of range covers that case separately.
Cause 3: Replacing a Function with a List
This error can also happen when a function name is reassigned to a list. The first call works while the name still points to a function. After reassignment, the same name points to a list, so the next call fails.
def get_names():
return ["Ada", "Grace", "Linus"]
names = get_names()
get_names = names
# This now raises: TypeError: 'list' object is not callable
again = get_names()
Avoid reusing function names for results. Use names that describe the type or meaning of the value, such as names for a list and get_names for the function that returns it.

Debug with type() and callable()
When the traceback is not obvious, print the object type and check whether Python considers it callable. The official callable() documentation says it returns whether an object appears callable. It is a quick way to confirm that the name you are about to call still points to a function, class, or callable instance.
items = [1, 2, 3]
print(type(items))
print(callable(items))
print(callable(len))
If callable(items) is False, do not use items(). Use indexing, iteration, or a list method instead. For more detail on callability, see our Python callable guide.
Find the Shadowed Name in Larger Code
In a larger file, start from the traceback line and search upward for the same name on the left side of an assignment. Look for patterns such as list =, items =, or a function name being reused for a result. In notebooks, also inspect earlier cells because old variables remain in memory until the kernel is restarted.
If the object comes from another function, print it before the failing call. A quick print(type(value), callable(value)) usually tells you whether the value is still a function or has already become a list. This is faster than guessing at every list in the program.
Checklist to Fix the Error
- Search for assignments such as
list = ...and rename them. - Replace
my_list(index)withmy_list[index]. - Restart notebooks after renaming a shadowed built-in.
- Use
type(name)andcallable(name)when the traceback points to a confusing name. - Keep function names and result variable names different.
The same pattern can affect other built-ins and types too. If you are seeing a similar message for strings, read TypeError: ‘str’ object is not callable. If your list is involved in hashing or set operations, see unhashable type: list. For output cleanup, the guide on removing brackets from a list may also help.

Summary
TypeError is raised when an operation is applied to an object of an inappropriate type. In this case, the inappropriate operation is calling a list. Rename variables that shadow list(), use square brackets for indexing, and check suspicious names with callable(). Those three steps fix the vast majority of 'list' object is not callable errors.
Separate Indexing From Calling
Square brackets select an item, a slice, or a mapping key. Parentheses call a function or another object that implements __call__(). The punctuation is close visually but represents different operations, so rewrite the failing expression based on the data flow rather than suppressing the exception.
values = [10, 20, 30]
print(values[0])
print(values[1:])
def first(items):
return items[0]
print(first(values))
Find Name Shadowing
A built-in or function can be replaced by a list assignment earlier in the file, loop, notebook cell, or callback. Print type(name) and repr(name) at the boundary, then rename the data variable. Restart a long-running interactive process after fixing a shadowed name.
list = ["not", "the", "constructor"]
try:
list((1, 2))
except TypeError as error:
print(type(list).__name__, error)
del list
print(list((1, 2)))

Read The Traceback From The Bottom
The last traceback line identifies the expression Python could not call. Work backward to the assignment that produced the value, including return statements, loop variables, and dictionary lookups. Add a small assertion at an interface boundary when a callable is a required input.
from collections.abc import Callable
def run(operation: Callable[[int], int], value: int) -> int:
if not callable(operation):
raise TypeError("operation must be callable")
return operation(value)
print(run(lambda value: value + 1, 4))
Use A Custom Callable Only Deliberately
A class instance can be callable when its class defines __call__(), but a built-in list is not. This advanced pattern can make stateful strategies readable, yet it should be documented so callers know that parentheses are part of the object’s interface.
class Multiplier:
def __init__(self, factor):
self.factor = factor
def __call__(self, value):
return self.factor * value
double = Multiplier(2)
print(double(5))
Python’s callable() documentation explains how to test whether an object can be called. Use the distinction between indexing and calling consistently in code reviews and tests.
For related call errors, compare integer call mistakes, string call mistakes, and callable() checks when tracing a shadowed function name.
Frequently Asked Questions
What does list object is not callable mean?
Python found a list where code used function-call parentheses, such as values(0), even though a list should normally be indexed with values[0].
How do I fix a list call error?
Find the failing parentheses, decide whether the code intended indexing or calling a function, and rename variables that accidentally replaced a callable.
Can a list be callable?
A normal list is not callable, although a custom class could implement __call__(); that is uncommon and should be explicit in the design.
Why does this happen after using a function name?
A variable assignment may shadow the function name with a list, so inspect the value’s type immediately before the failing expression.