2015-08-31 2 views
0

У меня есть этот питон класс, в котором мне нужно сделатьосвободить DeepCopy словаря в питоне

self.data = copy.deepcopy(raw_data) 

raw_data представляет собой словарь словаря и занимает много мегабайта памяти. Мне нужны данные только один раз (в котором я делаю некоторые изменения в данных, поэтому нужно делать глубокую копию), и я хотел бы уничтожить данные глубины, как только закончите с вычислением.

Что было бы лучшим способом для очистки данных из памяти?

Будет ли это работать?

self.data = None 

Примечание. Я использую Python 3.4, если это имеет значение.

+0

Примечание. Я новичок в python и имею фон C++ (так что я ищу что-то вроде C++ ** delete **) –

+1

[del] (http://stackoverflow.com/questions/6146963/when -is-del-useful-in-python), вероятно, это ключевое слово, которое вы хотите? Он удаляет ссылку, которая позволит сборщику мусора позаботиться об этом. – NightShadeQueen

+0

@NightShadeQueen Да, это, кажется, ответ. ** del ** используется для удаления целых переменных. https://docs.python.org/3.4/tutorial/datastructures.html?highlight=del#the-del-statement –

ответ

0

Некоторые говорят, что не обязательно, чтобы python выполнил это для вас, если вы не используете varaible какое-то время. Некоторые говорят, что используют библиотеку сборщиков гаражей.

По Havenard и к Python Official Documentation, вы можете заставить сборщик мусора освободить память с неиспользуемой GC.Collect()

Для получения дополнительной информации по этому вопросу:

How can I explicitly free memory in Python?

+0

Благодарим за быстрый ответ. Позвольте мне прочитать документацию и вернуться с некоторым обратным адресом –

+0

, кажется, что вы можете указать, какую переменную нужно передать сборщику мусора. Из того, что я мог видеть, вы можете вызвать 'del self.data', а затем он вызовет сборщик мусора. –

0

Вы должны остановить ссылаясь на объект как прямо, так и косвенно. Может быть, настройка self.data на None недостаточна. del self.data делает примерно то же самое, но вместо того, чтобы устанавливать self.data на None, он вместо этого удаляет атрибут data от self.

CPython (обычная реализация python) использует подсчет первичных ссылок для определения того, когда объект может быть собран, когда счетчик ссылок упал до нуля, он будет собран немедленно. Вы можете проверить счетчик ссылок self.data с помощью sys.getrefcount(self.data), но это может смутить вас, поскольку оно может сообщить еще одну ссылку, поскольку сама функция имеет ссылку на объект.

Смежные вопросы