Как и в ответе Нико, это зависит от того, что вы делаете с результатом, возвращенным exampleMethod. Python (или CPython в любом случае) использует подсчет ссылок. Во время метода aVar ссылается на строку, в то время как после этого переменная aVar удаляется, что может не оставить ссылок, в этом случае она удаляется.
Ниже приведен пример с пользовательским классом, имеющим деструктор ( del (self), который выводит «Уничтожаемый объект 1» или аналогичный. Gc - это модуль сборки мусора, который автоматически удаляет объекты с числом ссылок 0. Это для удобства, так как в противном случае нет никакой гарантии, когда сборщик мусора запущен.
import gc
class Noisy(object):
def __init__(self, n):
self.n = n
def __del__(self):
print "Object " + str(self.n) + " being destructed"
class example(object):
def exampleMethod(self, n):
aVar = Noisy(n)
return aVar
a = example()
a.exampleMethod(1)
b = a.exampleMethod(2)
gc.collect()
print "Before b is deleted"
del b
gc.collect()
print "After b is deleted"
Результат должен быть следующим:
Object 1 being destructed
While b lives
Object 2 being destructed
After b is deleted
Обратите внимание, что первый объект Noisy удаляется после возврата метода, так как он не присвоен переменной, поэтому имеет счетчик ссылок 0, но второй удаляется только после удаления переменной b, оставляя счетчик ссылок 0.