在 python 内从内存中完全删除对象

Completely erase object from memory in python

使用 python,我遇到了一个有趣的问题:我的脚本读取了一些敏感信息,我希望数据在使用后立即完全清除。类似于:

try:
    useData(sensitiveString)
except:
    print("There was a problem executing useData()")
finally:
    scrubFromMemory(sensitiveString) 

这是为了尽量减少 sensitiveString 仍然驻留在内存中的可能性,即使在发生错误时也是如此。 我考虑过更改字符串,例如:

sensitiveString = "*" * (len(sensitiveString)-1)  # does this overwrites memory, or creates a new object?
sensitiveString = "*" * 10000  # sensitive string is guaranteed to be relatively short
del sensitiveString
gc.collect()

但我在某处读到,在 python 中(由于 c 实现),对字符串的修改将导致在内存中创建一个新的字符串对象。所以原来的 sensitiveString 仍然可以 "ghost" 存在于应用程序的内存转储中的某个地方。我想避免这种情况。 编辑:错字 - gc.collect() 而不仅仅是 gc()

有什么建议可以让我完全清除内存中的 sensitiveString 吗?

您需要调用垃圾收集器。

gc documentation

gc.collect()

好吧,显然,在 Python 中没有真正的方法可以做到这一点,因为字符串对象是不可变的。对这些字符串的引用随处可见。最好的方法是 del 和 gc.collect()。如本 link、"accept it, or move on. Anything else will give you a false sense of security"

中所述