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

例如。
考虑

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的垃圾收集,请给我一些链接。

  • http://en.wikipedia.org/wiki/Garbage_collection_(computer_science)
  • http://www.digi.com/wiki/developer/index.php/Python_Garbage_Collection
  • http://www.doughellmann.com/PyMOTW/gc/
  • http://docs.python.org/library/gc.html
  • 关于python - 字典的clear()方法是否从内存中删除所有与项目相关的对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10446839/

    10-14 21:51
    查看更多