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

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

如果一个字典包含可变对象或自定义类的对象(例如,查询器,甚至是一个DateTime),那么将在字典上调用clear()从内存中删除这些对象?
它的行为不同于循环通过dict并删除它们吗?

例如。
考虑

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

http://stackoverflow.com/questions/10446839/does-dictionarys-clear-method-delete-all-the-item-related-objects-from-memory

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – 字典的clear()方法是否从内存中删除所有与项目相关的对象?