Home > Backend Development > Python Tutorial > Why Does Modifying a List Copy Sometimes Change the Original: Shallow vs. Deep Copy?

Why Does Modifying a List Copy Sometimes Change the Original: Shallow vs. Deep Copy?

Patricia Arquette
Release: 2024-12-08 09:09:11
Original
418 people have browsed it

Why Does Modifying a List Copy Sometimes Change the Original: Shallow vs. Deep Copy?

How to Deep Copy a List: Understanding Shallow vs. Deep Copies

Suppose you have a list E0 and create a copy E0_copy using list(E0). Intuitively, you might assume that E0_copy is a deep copy since their IDs differ. However, modifying E0_copy in a loop unexpectedly alters E0 as well. Why does this occur?

The Pitfall of Shallow Copies

list(...) creates a shallow copy, which means it only duplicates the outermost list while retaining references to the same inner lists. Therefore, when you manipulate an inner list of E0_copy, you also impact E0 because both lists point to the same internal structures.

The Solution: Deep Copying

To perform a deep copy, utilize the copy.deepcopy(...) function. It creates a genuine deep copy by recursively copying all objects, including nested structures. This operation ensures that changes made to the copy do not affect the original.

Demonstration

Consider the following code snippet, where list(...) results in a shallow copy:

a = [[1, 2, 3], [4, 5, 6]]
b = list(a)
print(a == b)  # True, indicates shallow copy
Copy after login

Now, using copy.deepcopy(...) for deep copying:

import copy
b = copy.deepcopy(a)
print(a == b)  # False, confirms deep copy
Copy after login

Now, modifying a does not affect b, demonstrating the isolation provided by deep copying.

The above is the detailed content of Why Does Modifying a List Copy Sometimes Change the Original: Shallow vs. Deep Copy?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template