Первое, что необходимо понять, это то, что ни del self.x
, ни self.x = None
не освобождают много памяти. Что они оба делают, так это уменьшают счетчик ссылок объекта, на который ссылается self.x
, на единицу. Затем, если счетчик этого объекта достиг 0, когда сборщик мусора будет работать, тогда память будет освобождена
Для разницы между ними вы не сможете прочитать значение self.x
, поскольку del self.x
удалит x
из словаря экземпляра. self.x = None
просто переназначает self.x
объекту None.