Clone a list in Python

David Y.

The Problem

After I attempt to copy a list by setting new_list = old_list, any modifications to new_list also affect old_list. What is the proper way to clone a list and avoid this?

The Solution

The code new_list = old_list does not create a second list, but merely causes new_list to reference the same list object as old_list. To make new_list an independent copy of old_list, we must explicitly copy the list. We can do this in two ways:

  • Shallow copy: Creates a new list, but does not create copies of the objects that the original list references. Both the original and the cloned list will still reference the same objects.
  • Deep copy: Creates a new list and creates copies of every object in the original list references, recursively, ensuring that the two lists are entirely independent.

Performing a shallow copy is sufficient for lists containing simple, immutable types, such as numbers and strings. If a list contains other lists, dictionaries, or custom objects, a deep copy will be required.

We can use one of three methods to make a shallow copy:

  1. list.copy: The list.copy method makes a shallow copy of the original list:

    old_list = [1, 2, 3, 4, 5] new_list = old_list.copy()
  2. List slicing: We can also create a clone of a list using list slicing:

    new_list = old_list[:]

    This creates a new list by slicing the old list from its first to its final element. It is identical to list.copy but may be less clear.

  3. Using the list constructor: We can also create a new list from the existing list by passing it to the list constructor.

    new_list = list(old_list)

    Again, this syntax produces identical results to the copy method but may be less clear.

To make a deep copy of the list, we must use the deepcopy function from Python’s built-in copy module:

import copy old_list = [[1, 2], [3, 4]] new_list = copy.deepcopy(old_list) new_list[0][1] = 5 # change inner list in copy print(old_list) # will print [[1, 2], [3, 4]] print(new_list) # will print [[1, 5], [3, 4]]

Get Started With Sentry

Get actionable, code-level insights to resolve Python performance bottlenecks and errors.

  1. Create a free Sentry account

  2. Create a Python project and note your DSN

  3. Grab the Sentry Python SDK

pip install --upgrade sentry-sdk
  1. Configure your DSN
import sentry_sdk sentry_sdk.init( "https://<key><project>", # Set traces_sample_rate to 1.0 to capture 100% # of transactions for performance monitoring. # We recommend adjusting this value in production. traces_sample_rate=1.0, )

Check our documentation for the latest instructions.

Loved by over 4 million developers and more than 90,000 organizations worldwide, Sentry provides code-level observability to many of the world’s best-known companies like Disney, Peloton, Cloudflare, Eventbrite, Slack, Supercell, and Rockstar Games. Each month we process billions of exceptions from the most popular products on the internet.

Share on Twitter
Bookmark this page
Ask a questionJoin the discussion

Related Answers

A better experience for your users. An easier life for your developers.

© 2024 • Sentry is a registered Trademark
of Functional Software, Inc.