Сборка мусора и ссылки на атрибуты объекта - PullRequest
0 голосов
/ 18 февраля 2019

Когда больше нет ссылок на объект, GC должен избавляться от него постоянно.Но что происходит, когда у нас все еще есть ссылки на атрибуты или методы объекта?

Например, в приведенном ниже коде я все еще пытаюсь использовать a.x, хотя a было удалено.Это допустимый фрагмент кода?

import gc

class A:
    def __init__(self, x):
        self.x = x

a = A(7)
x = a.x
del a
gc.collect()

print(x)  # is it going to work?

Изменится ли ответ, если я использую метод вместо атрибута?Например:

import gc

class A:
    def __init__(self, x):
        self.x = x

    def method(self):
        print("A.method", self.x)

a = A(7)
f = a.method
del a
gc.collect()

f()  # is it going to work?

1 Ответ

0 голосов
/ 18 февраля 2019

Обе части кода работают.

Ссылка на что-либо защищает объекты от сбора.В большинстве случаев включаются родительские объекты / классы / замыкания, потому что на самом деле ограничение обрабатывает ссылочную цепочку «автоматически»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...