Здравствуйте, коллеги!
Я не очень понимаю механизм создания экземпляров класса.
class obj:
__value = []
def __init__(self, string: str):
self.__value.append(string)
def clean(self):
self.__value = []
if __name__ == '__main__':
lst = []
for i in range 5:
objct = obj('python')
#lst.append(objct)
Данный код я не проверял, но в схожей ситуации у меня при создании нового объекта __value имел данные из ранее созданного объекта. И размерность __value начинала расти. Сначала len(__value) = 1, потом 2, далее 3 и т.д..
Возможно я не правильно понимаю механизм уничтожения объектов (сборщик мусора), но объект должен уничтожаться когда на его экземпляр перестает указывать последняя переменная (Счетчик указателей становится равным нулю)?
Соответственно, предыдущий экземпляр ‘objct’ должен удалятся в момент: objct = obj(‘python’) и, соответственно чистится память, но этого не происходит.
Видимо я что-то не правильно понимаю? Победить эту беду мне удалось добавив в конструктор self.__value = []. Но но осадочек остался…
Теперь подходим к засовыванию объектов в list (массив).
Я специально привел функцию ‘clean(self)’
В массив попадает лишь указатель на экземпляр класса, а не сам класс. Можно ли как-то заставить python запихивать в массив не указатель, а весь экземпляр (объект) целиком?