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 數組而不是 Python 列表。對 numpy 陣列進行切片會建立原始資料的視圖,共享相同的記憶體空間。這在具有大型數據集的場景中非常有利。
但是,請務必注意,使用視圖需要考慮其他注意事項,例如不同視圖之間潛在的意外修改。理解這種行為對於避免程式碼中出現意外後果至關重要。
以上是Python 清單切片是否會建立元素的副本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!