問題:
給定一個整數的所有列表,產生該整數的所有列表列表有效地形成L[k:] for k in [0, len(L)-1] 而不建立副本。
答案:
在 Python 中切片列表不會產生底層物件的副本,僅對它們的引用。
為了示範這一點,請考慮三個具有相同值的整數物件:
它們有不同的物件ID,表明它們是單獨的對象:
對這些對象進行切片會產生具有相同引用的新列表對象,表明尚未創建新對象:
此行為適用於不可變(例如整數)和可變(例如列表)值。
雖然切片不會產生新對象,但它確實會產生一些記憶體開銷複製引用和維護清單元資料。例如,包含 N 個元素的清單的記憶體開銷為 72 位元組。
如果記憶體最佳化至關重要,請考慮使用 numpy 數組而不是列表,就像切片 numpy 數組一樣在切片和原始數組之間共享記憶體。然而,這種方法需要小心處理,以避免無意的修改。
Python 中的列表切片是一種高效的操作,不會產生底層物件的副本。在考慮效能優化時應考慮到這種行為。
以上是在 Python 中對清單進行切片是否會建立底層物件的副本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!