Я создал большой многомерный массив M
с np.zeros((1000,1000))
. После определенного количества операций мне это больше не нужно. Как я могу освободить оперативную память динамически во время выполнения программы? M=0
сделайте это для меня?динамическое распределение памяти в python
ответ
общий вы не можете. Даже если вы удалите все ссылки на объект, для реализации python остается возможность повторно использовать или освобождать память. На CPython вы можете позвонить gc.collect()
, чтобы принудительно запустить сборку мусора. Но в то время как это может вернуть память, это не обязательно возвращает его ОС.
Но: numpy - это модуль расширения, который выполняет свою собственную работу и управляет собственной памятью.
Когда я контролировать использование памяти процесса питона, я вижу использование оперативной памяти (Resident Set Size) спускаясь после del(M)
In [1]: import numpy as np
In [2]: M = np.zeros((1000,1000))
In [3]: del(M)
In [4]:
Сразу после запуска IPython:
slackbox:~> ps -u 77778
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
rsmith 77778 0.0 0.5 119644 22692 0 S+ 2:37PM 0:00.39 /usr/local/bin/py
После импорта numpy (1):
slackbox:~> ps -u 77778
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
rsmith 77778 1.0 0.8 168548 32420 0 S+ 2:37PM 0:00.49 /usr/local/bin/py
После создания массива (2):
slackbox:~> ps -u 77778
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
rsmith 77778 0.0 1.0 176740 40328 0 S+ 2:37PM 0:00.50 /usr/local/bin/py
После вызова del
(3):
slackbox:~> ps -u 77778
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
rsmith 77778 0.0 0.8 168548 32496 0 S+ 2:37PM 0:00.50 /usr/local/bin/py
slackbox:~>
Так в этом случае с использованием del()
может уменьшить объем памяти, используемый.
Обратите внимание, что существует исключение с помощью numpy. Numpy может использовать память, выделенную другой библиотекой расширений. В этом случае объект numpy отмечен как numpy не владеет памятью, а освобождение остается в другой библиотеке.
Благодарим за ответ – freude
Существует два пути .......
1). del M
But it will delete the array object it self.
2). M.clear()
you can clear the array without deleting M object
Используйте del заявление:
del M
И кстати, float64
массив формы (1000, 1000)
занимает всего 7 Мб. Если у вас проблемы с памятью, вероятно, проблема в другом месте.
- 1. Динамическое распределение памяти вопрос
- 2. Динамическое распределение памяти, C++
- 3. Динамическое распределение памяти
- 4. Динамическое распределение памяти
- 5. malloc()/Динамическое распределение памяти
- 6. Дисковое динамическое распределение памяти
- 7. Динамическое распределение памяти C
- 8. Динамическое распределение памяти «удалить»
- 9. Qt, динамическое распределение памяти
- 10. Malloc-Динамическое распределение памяти
- 11. C динамическое распределение памяти
- 12. Pascal - динамическое распределение памяти
- 13. Динамическое распределение памяти
- 14. Динамическое распределение утечек памяти?
- 15. динамическое распределение памяти
- 16. realloc, динамическое распределение памяти
- 17. динамическое распределение памяти в C
- 18. Динамическое распределение памяти в C
- 19. Динамическое распределение памяти в C++
- 20. Динамическое распределение памяти в VB6
- 21. Динамическое распределение памяти в MPI
- 22. Динамическое распределение памяти в упражнении
- 23. Динамическое распределение памяти в C
- 24. Динамическое распределение памяти в Android
- 25. Динамическое распределение памяти в c?
- 26. Одноразовое распределение памяти или динамическое распределение
- 27. Динамическое распределение памяти для Arraylists?
- 28. Как работает динамическое распределение памяти
- 29. 2D Динамическое распределение памяти - ObjectiveC
- 30. Динамическое распределение памяти со структурами
'M = 0' удалит ссылку, как и' del M', и если бы это была единственная ссылка, она должна быть немедленно освобождена. – Aya
Я отслеживаю память, и я вижу, что M = 0 не влияет на память. Вот почему я спрашиваю. – freude
'del M' также лучше IMHO, так как' M' больше не загрязняет пространство имен your'e in. – StoryTeller