Home >Backend Development >Python Tutorial >Why Does List Multiplication Create Shared Sublists in Python?

Why Does List Multiplication Create Shared Sublists in Python?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-23 12:55:10994browse

Why Does List Multiplication Create Shared Sublists in Python?

Unexpected Changes in Lists of Lists

When creating a list of lists using list multiplication, be cautious of unexpected changes.

Problem Description

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]]

Explanation

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.

Solution

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.

Deeper Understanding: Immutable Integers

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn