List mutability in Python - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When we change items in a list, it's important to know how long these changes take as the list grows.
We want to understand how the time to update a list item changes when the list gets bigger.
Analyze the time complexity of the following code snippet.
my_list = [0] * n
my_list[5] = 10
This code creates a list of size n and then changes the value at index 5.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Direct access and update of a list element by index.
- How many times: Exactly once in this example.
Changing one item in a list takes the same amount of time no matter how big the list is.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 1 |
| 100 | 1 |
| 1000 | 1 |
Pattern observation: The time stays the same even if the list grows larger.
Time Complexity: O(1)
This means updating a list item by its position takes a constant amount of time, no matter the list size.
[X] Wrong: "Changing an item in a list takes longer if the list is bigger."
[OK] Correct: Because lists in Python allow direct access by index, the update happens immediately without checking other items.
Knowing that list updates are quick helps you explain why some operations are fast and others slower, showing you understand how data structures work.
"What if we insert an item at the start of the list? How would the time complexity change?"
Practice
Solution
Step 1: Understand list mutability
Python lists are mutable, meaning you can change their contents after creation.Step 2: Compare options
Lists can be changed after they are created. ("Lists can be changed after they are created.") correctly states that lists are mutable. Options A and C incorrectly claim lists cannot be changed or are immutable like strings. Lists can only store numbers. is wrong because lists can store any data type.Final Answer:
Lists can be changed after they are created. -> Option BQuick Check:
List mutability = True [OK]
- Confusing lists with strings (immutable)
- Thinking lists only hold numbers
- Believing lists cannot be changed
my_list to 10?Solution
Step 1: Recall list item assignment syntax
In Python, list items are accessed and assigned using square brackets and index, likemy_list[0].Step 2: Check each option
my_list[0] = 10 uses correct syntax. Options B and C use wrong brackets. my_list.set(0, 10) uses a method that does not exist for lists.Final Answer:
my_list[0] = 10 -> Option AQuick Check:
Use square brackets for list item assignment [OK]
- Using parentheses instead of brackets
- Trying to use curly braces for indexing
- Assuming lists have a set() method
numbers = [1, 2, 3] numbers[1] = 5 print(numbers)
Solution
Step 1: Understand list item update
The code changes the item at index 1 (second item) from 2 to 5.Step 2: Check the final list
After update, the list becomes [1, 5, 3]. The print statement outputs this list.Final Answer:
[1, 5, 3] -> Option AQuick Check:
Updated list = [1, 5, 3] [OK]
- Thinking index 1 is first item
- Expecting original list unchanged
- Assuming code causes error
my_list = [10, 20, 30] my_list(1) = 15 print(my_list)
Solution
Step 1: Identify indexing syntax error
The code uses parentheses()instead of square brackets[]to access list item.Step 2: Confirm correct syntax
List items must be accessed with square brackets, somy_list[1] = 15is correct.Final Answer:
Using parentheses instead of square brackets for indexing -> Option CQuick Check:
Use [] not () for list indexing [OK]
- Using () instead of [] for list indexing
- Thinking lists are immutable
- Looking for syntax errors elsewhere
data = [5, 10, 15, 20], which code snippet correctly doubles each item in the list using mutability?Solution
Step 1: Understand mutability and iteration
To change items in place, we must assign new values to each index in the list.Step 2: Analyze each option
for i in range(len(data)): data[i] = data[i] * 2 print(data) updates each item by index, correctly doubling values in place.
for item in data: item = item * 2 print(data) changes only the loop variable, not the list.
data = [item * 2 for item in data] print(data) creates a new list and assigns it to data (not in-place mutation).
data.map(lambda x: x*2) print(data) uses map which returns an iterator and does not modify list in place.Final Answer:
for i in range(len(data)): data[i] = data[i] * 2 print(data) -> Option DQuick Check:
In-place update requires index assignment [OK]
- Modifying loop variable instead of list items
- Using map without converting result
- Replacing list instead of mutating it
