Home >Backend Development >Python Tutorial >Why Does List Multiplication Create Shared Sublists in Python?
When creating a list of lists using list multiplication, be cautious of unexpected changes.
Creating a list of lists with a simple list multiplication, like:
xs = [[1] * 4] * 3
may lead to inesperado consequences. Changing a value within one sublist affects all sublists:
xs[0][0] = 5 print(xs) # [[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]
The multiplication operator operates on objects, not expressions. Thus, [[1] * 4] * 3 only sees the evaluated sublist [1, 1, 1, 1] three times. Instead of creating new sublists, creates references to the existing one.
To avoid this behavior and ensure independent sublists, use a list comprehension:
xs = [[1] * 4 for _ in range(3)]
This expression reevaluates [1] * 4 for each iteration, resulting in distinct sublists.
It's important to note that integers in Python are immutable. This means operations like:
1.value = 2
are invalid, as integers have no modifiable value attribute. Therefore, despite [1] * 4 not copying the integers themselves, it doesn't matter because integers cannot be modified.
The above is the detailed content of Why Does List Multiplication Create Shared Sublists in Python?. For more information, please follow other related articles on the PHP Chinese website!