Чтобы удалить объект Python an_object
из памяти, вызовите del(an_object)
и дождитесь начала сбора мусора. На сбор мусора также можно вмешаться вручную с помощью модуля gc на ваш риск.
Важно уточнить, что del(an_object)
или аналогичные методы удаления не удаляют объект из памяти, а только удаляют имя an_object
из пространства имен.Вам все еще нужно ждать сборки мусора.
ОБНОВЛЕНИЕ Чтобы ответить на комментарий, приведенный ниже, мы можем проверить, является ли фрагмент массива ссылкой на исходный массив или нет, с помощью следующегоcode:
import numpy as np
x_old = np.arange(0,10,1) # x_old = np.array([0,1,2,3,4,5,6,7,8,9])
x_new_1 = x_old[:5] # We slice the array, without calling .copy()
# x_new = np.array([0,1,2,3,4])
x_old[2]=100 # We change the third element of the original array, from 2 to 100
print(x_new_1) # The output is [ 0 1 100 3 4]. x_new_1 is thus a reference to x_old,
# not a new object
x_old[2]= 2 # Restore original value
x_new_2 = x_old[:5].copy() # This time we call .copy() on the slice, or the whole array for that matter.
x_old[2]=100 # again we change the value
print(x_new_2) # The output is array([0, 1, 2, 3, 4])
Следовательно, вызов .copy () для исходного массива создаст новый объект, что позволит вам удалить старый из пространства имен и дождаться его автоматического удаления из памяти.Если вы не вызываете .copy (), вы все еще работаете со ссылкой на старый объект, и, как следствие, все, что происходит с исходным объектом, связывает ссылку.
Что делать, если вы хотитеудалить из памяти часть массива:
1) Скопировать фрагмент исходного массива, который вы хотите сохранить, в новый массив с новым именем.
2) Вызвать del
илилюбая другая инструкция удаления в исходном массиве
3) Дождаться его автоматического удаления из памяти
4) Продолжить работу с новым объектом.
Поскольку вы работаете с большимТем не менее, помните, что при использовании этого процесса у вас есть оба массива, загруженные в память на определенное время.
UPDATE 2
OP, как упомянуто @Lightalchemist в комментарии ниже, код, который вы предоставили, не создает ссылку на x, а скорее на его копию.Код, который вы указали в качестве примера, не соответствует описанию проблемы, с которой вы столкнулись.