簡體   English   中英

如果我讀取一個元組而不是單個值,Python 泄漏 memory

[英]Python leaks memory if I read a tuple instead of single value

我正在使用 Python 查詢 RocksDB 數據庫中是否存在密鑰。 API(見底部)意味着它返回一個二元素元組。 所以我收到了兩個元組元素:

def contains_key(database: rocksdb, key: int) -> bool:
    found, data = database.key_may_exist(key)
    return found

我正在這樣使用它:

if not contains_key(database, key):

但是,這會導致 memory 泄漏。

為了證明這一點,如果我將代碼更改為:

def contains_key(database: rocksdb, key: int) -> bool:
    return database.key_may_exist(key)

沒有泄漏(但顯然不正確)。

如何讓第一個版本在沒有 memory 泄漏的情況下工作?

在此處輸入圖像描述

你的代碼

def contains_key(database: rocksdb, key: int) -> bool:
    found, data = database.key_may_exist(key)
    return found

不包含 memory 泄漏。

founddata是本地 scope 中的兩個名稱,均指 memory 單個區域中存在的值。 當function返回時, found scope中的data go。 調用者可以引用found的內容( x = contains_key(db, 3) ),但忽略data 由於不存在對 object 的其他引用,因此 Python(作為垃圾收集語言)會自動回收用於data的任何資源。

就此而言, key_may_exist方法返回一個您永遠無法安全引用的元組。 它立即被解包, founddata引用了該元組所引用的任何內容。 元組本身是垃圾收集的,但對其內容的引用仍然存在。

暫無
暫無

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

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