1

我正在研究一个 Python 类,其结构类似于此答案中的示例:https ://stackoverflow.com/a/1383744/576333 。该类本身使用字典跟踪所有创建的对象。

class Repository(object):

    # All repositories are stored in this class-level dictionary such that 
    # all instances of this class maintain the same set.
    all_repos = {}   

    def __init__(self, name, data):
        """
        Create a repository object. If it has the required tags, include it in
        the collection of all repositories.
        """

        # Don't add it if it already exists
        if not name in Repository.all_repos:

            # Store the attributes
            self.__dict__ = data
            self.__dict__['name'] = name

            Repository.all_repos.update({ name: self })

我的问题是当我创建一个删除/删除方法并想Repositoryall_repos字典中清除一个实例时,python 中会发生什么?这是我计划做这样的方法:

def remove(self):
    repo = Repository.all_repos.pop(self.name) # pop it out
    print "You just removed %s" % repo.name

具有以下用法:

a= Repository('repo_name', {'attr1':'attr1_value',...}
a.remove()

此时,a仍然存在,但不在Repository.all_repos. Python 什么时候会最终移除a

4

1 回答 1

1

我发现这篇文章对可视化垃圾收集很有帮助。它使用 Ruby 的 GC 进行比较,但值得一读:

http://patshaughnessy.net/2013/10/24/visualizing-garbage-collection-in-ruby-and-python

于 2013-11-27T21:26:53.760 回答