Справочный вопрос по Python, приведет ли это к утечке памяти - PullRequest
0 голосов
/ 21 июня 2019

Извините за смутное название вопроса, но вопрос слишком длинный, чтобы вставить название. Если кто-то может перефразировать это лучше, пожалуйста, сделайте.

У меня есть справочный вопрос о том, как объекты собирают мусор. Насколько я помню, объекты собирают мусор, когда на него больше нет ссылок. Имея это в виду, будет ли удален объект, если все, что у меня есть, это ссылка на один из его элементов данных?

Вот простой пример класса, с которым я работаю (у меня он намного больше с гораздо большей функциональностью, поэтому я создаю экземпляр класса внутри себя для обработки логики):

class A:

    def __init__(self):
        self.my_list = []

    def read_list_from_new_source(self):
        new_instance = A()
        for i in range(10):
            new_instance.add(i)

        self.my_list = new_instance.my_list

    def add(self, element):
        """
        Just adding an element to the list attribute of the class
        """
        self.my_list.append(element)

У меня вопрос, будет ли new_instance собираться мусором после завершения метода read_list_from_new_source? Или он останется в памяти, потому что self.my_list теперь содержит ссылку на один из его атрибутов?

Я знаю list, что ссылки new_instance.my_list не будут удалены, но я беспокоюсь, что весь экземпляр класса останется в памяти.

Я бы подумал, что, поскольку сам объект больше не имеет ссылки, объект будет удален, и останется только list, но я не знаю, как я могу проверить эту теорию, чтобы убедиться, что я не надену нет утечки памяти.

...