簡體   English   中英

了解遞歸調用中的Python列表內存使用情況

[英]Understanding Python List Memory Usage In Recursive Calls

我只是想檢查一下我是否正確理解了Python的內存管理。

以下函數將使用O(j)內存,但不使用 O(nj)內存,因為參數n是對列表的引用,但不是列表本身。

def cool(n,j):
    if j == 0:
        return
    return cool(n,j-1)

另外,說這個函數是用C編寫的,我是否正確地假設使用C,它的內存使用量將是O(nj) ,因為將為每個遞歸調用創建列表/數組的副本。

對,那是正確的。 每個遞歸步驟將使用O(1)內存:函數調用開銷,以及每個函數參數一個指針。

您可以通過創建一個大對象( x = "x" * 1024 * 1024 * 100 ),然后對其重復進行多次並檢查進程的內存使用情況來實驗性地驗證這一點:

def recurse(x, n):
    if n == 0:
        raw_input("done! Check memory usage now.")
        return
    return recurse(x, n - 1)

recurse(x, 1000)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM