python - 字典的 clear() 方法是否会从内存中删除所有与项目相关的对象?

标签 python memory dictionary

如果字典包含可变对象或自定义类的对象(例如查询集,甚至是 DateTime),那么在字典上调用 clear() 会从内存中删除这些对象吗? 它的行为是否与遍历 dict 和 deleting 不同?

例如。 考虑

class MyClass(object):
    '''Test Class.'''

my_obj_1 = MyClass()
my_obj_2 = MyClass()

my_dict = { 'foo' : my_obj_1, 'bar' : my_obj_2 }

然后是

my_dict.clear()

for key in my_dict.keys():
    del my_dict[key]

?

最佳答案

Python documentation on dicts声明 del d[key] 从字典中删除 d[key]d.clear() 删除每个键,所以基本上他们的行为是一样的。

关于内存问题,在 Python 中,当您“删除”时,您基本上是在删除对对象的引用。当一个对象没有被任何变量或其他对象引用或变得无法访问时,它就会变成垃圾并且可以从内存中删除。 Python 有一个垃圾收集器,不时它会检查哪些对象是垃圾并释放为它们分配的内存。 如果您从字典中删除的对象被其他变量引用,那么它仍然是可访问的,因此它不是垃圾,因此不会被删除。如果您有兴趣阅读有关垃圾收集的一般信息,特别是 python 的垃圾收集,我会在此处为您提供一些链接。

关于python - 字典的 clear() 方法是否会从内存中删除所有与项目相关的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10446839/

相关文章:

python - 用于运行 python 脚本的日志命令

python - 如何从用户输入的 float 中删除一组字符 - Python

.net - 类内存堆/引用变量概念

memory - Tensorflow、Flask 和 TFLearn 内存泄漏

python - 使用大型文本语料库时出现内存错误

javascript - JS - 将字符串映射到对象数组 ¿如何更改键名?

java - 对象转换模式

c++ - 为什么 map::clear 不调用析构函数?

python - 通过 API 网关从 HTML 向 Python Lambda 函数发送 POST 请求

python - tensorflow : can not create dataset with corresponding label using Dataset API