[英]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 泄漏。
found
和data
是本地 scope 中的兩個名稱,均指 memory 單個區域中存在的值。 當function返回時, found
scope中的data
go。 調用者可以引用found
的內容( x = contains_key(db, 3)
),但忽略data
。 由於不存在對 object 的其他引用,因此 Python(作為垃圾收集語言)會自動回收用於data
的任何資源。
就此而言, key_may_exist
方法返回一個您永遠無法安全引用的元組。 它立即被解包, found
和data
引用了該元組所引用的任何內容。 元組本身是垃圾收集的,但對其內容的引用仍然存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.