如果字典包含可变对象或自定义类的对象(例如查询集,甚至是 DateTime),那么在字典上调用 clear()
会从内存中删除这些对象吗?
它的行为是否与遍历 dict 和 del
eting 不同?
例如。 考虑
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/