Как / когда Python собирает объекты, которые содержат коллекцию всего своего типа?

Я работаю над классом Python, который структурирован, как пример в этом ответе: /questions/24501810/struktura-dannyih-python-dlya-kollektsii-obektov-s-proizvolnyim-dostupom-na-osnove-atributa/24501823#24501823. Сам класс отслеживает все созданные объекты, используя словарь.

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 })

Мой вопрос заключается в том, что происходит в Python, когда я создаю метод удаления / удаления и хочу очистить экземпляр Repository от all_repos толковый словарь? Вот что я планировал сделать таким способом:

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?

1 ответ

Решение

Я нашел эту статью очень полезной для визуализации сборки мусора. Он использует Ruby GC для сравнения, но его стоит прочитать:

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

Другие вопросы по тегам