是否可以將(移動)指針傳遞給列表中的某個列表,並將其開始放入Python中的某個函數中?將列表指針傳遞給一個函數而不是列表
我有一個遞歸函數在列表的一部分工作。該列表本身沒有改變,只有指向它的「起點」的指針。我遇到的問題是,長列表導致內存溢出導致代碼死機。
下面是代碼:
def trim(l):
print("list len= ", len(l))
if len(l)!= 1:
trim(l[1:])
else:
print("done")
上面的例子是人爲的,我實際的代碼做不同的東西,不僅僅是修剪列表中,但它也有一個移動的開始指針。一個100萬個整數的列表在10G RAM機器上耗盡內存。
歡迎任何想法。
Python並不指針。您可以嘗試傳遞索引而不是創建副本的切片。你也可以考慮使用'numpy',它提供了面向對象的原始數組,其中切片創建視圖,而不是副本。還有內置的「數組」模塊,它提供空間有效的基本數組類型的原始數組。這兩種陣列方法都應該提供數量級的節省空間。一百萬64位整數約爲8兆字節 –
您可能會發現['deque'](https://docs.python.org/3.6/library/collections.html#collections.deque)數據結構有用。您可以使用'l.popleft()'從deque頭部刪除一個元素,而不是傳遞一個slice(這是所有元素的淺表副本)。當'l'是一個列表時,這不會導致'l.pop(0)'的複製成本。 – trentcl