Does Python List Slicing Create Copies or References?

DDD
Release: 2024-11-08 14:32:02
Original
778 people have browsed it

Does Python List Slicing Create Copies or References?

Partial List Slicing Without Copying in Python

Python's list slicing operation generates references to the original list's elements, rather than creating copies. This behavior stems from the fact that slicing preserves the object identities of the elements within the list.

Demonstration

To illustrate this, consider the following list:

<code class="python">L = [1000 + 1, 1000 + 1, 1000 + 1]</code>
Copy after login

Even though these integers have the same value, they are distinct objects:

<code class="python">map(id, L)
[140502922988976, 140502922988952, 140502922988928]</code>
Copy after login

Slicing the list simply copies the references:

<code class="python">b = L[1:3]
map(id, b)
[140502922988952, 140502922988928]</code>
Copy after login

Memory Overhead of Slicing

While slicing doesn't create copies of objects, it does involve copying references. These references add to the overall memory overhead associated with lists:

<code class="python">for i in range(len(L)):
    x = L[:i]
    print('len: {}'.format(len(x)))
    print('size: {}'.format(sys.getsizeof(x)))</code>
Copy after login

This overhead can accumulate, especially when working with memory-intensive objects like large lists or dictionaries.

Alternative: Views

Python lacks an easy way to create views or aliases of lists. However, NumPy arrays provide this capability. Slicing a NumPy array creates a view that shares memory with the original array. This can save significant memory but introduces potential pitfalls when modifying objects.

The above is the detailed content of Does Python List Slicing Create Copies or References?. 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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!