[英]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.