首頁  >  文章  >  後端開發  >  Python 清單切片是否會建立元素的副本?

Python 清單切片是否會建立元素的副本?

Patricia Arquette
Patricia Arquette原創
2024-11-07 06:04:03892瀏覽

Does Python List Slicing Create Copies of Elements?

在Python 中切片清單而不產生複製:綜合指南

核心概念:引用複製與物件複製

Python 中的切片清單不會建立清單中各個元素的副本。相反,它只是複製對這些元素的引用。對於不可變(例如整數)和可變(例如字典)物件都是如此。

使用整數物件進行測試

為了示範這一點,請考慮以下程式碼:

<code class="python">a = [1000 + 1, 1000 + 1, 1000 + 1]
b = a[1:3]</code>

即使清單a 中的物件是不可變整數,切片建立一個引用相同物件的新清單b。這從它們相同的ID 中可以明顯看出:

<code class="python">print(id(a[0]) == id(b[0]))  # True
print(id(a[1]) == id(b[1]))  # True</code>

檢查記憶體開銷

由於創建了額外的列表對象,切片確實會引入一些記憶體開銷。但是,無論清單的長度如何,此開銷都是恆定的,並且與物件本身的大小相比通常可以忽略不計。

替代方案:用於高效視圖的 Numpy 數組

如果記憶體保護是最重要的問題,請考慮使用 numpy 數組而不是 Python 列表。對 numpy 陣列進行切片會建立原始資料的視圖,共享相同的記憶體空間。這在具有大型數據集的場景中非常有利。

但是,請務必注意,使用視圖需要考慮其他注意事項,例如不同視圖之間潛在的意外修改。理解這種行為對於避免程式碼中出現意外後果至關重要。

以上是Python 清單切片是否會建立元素的副本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn