Делает ли удаление переменной в python для l oop более эффективное использование памяти? - PullRequest
1 голос
/ 01 августа 2020

Допустим, у меня есть переменная, в которой я буду использовать для al oop 1000 раз, так что:

A = [3,4,5,6]
for i in range(1000):
    # if something
    # c = <a list which length depends on runtime>
    A = c
    del c

Будет ли удаление c после одного l oop делает потребление памяти более эффективным ?

1 Ответ

1 голос
/ 01 августа 2020

В общем, нет. Это не так.

del удаляет имена из пространств имен , а не объекты.

Конечно, если вы удалите ссылку, и счетчик ссылок достигнет 0, объект будет восстановлен (сразу в CPython).

Но обратите внимание, что в вашем l oop выше, вы все равно создаете другую ссылку , A = c, поэтому это определенно совсем не помогает.

Существует один сценарий, в котором этот может быть полезным, предположим, вы делаете это в глобальном область видимости, например, на уровне модуля, а не в функции. Поскольку python циклы for не создают свои собственные области действия, c теперь остается в глобальном пространстве имен и потенциально поддерживает гигантский список до конца программы.

Это обычно лучше решается путем лучшей организации вашей программы в виде модульных функций и создания ссылок только на объекты в глобальной области видимости, которые вы хотите сохранить до конца программы. Однако иногда вы в конечном итоге делаете al oop таким образом, и в этом случае явное удаление этой последней ссылки действительно помогает (но, опять же, поскольку вы сделали A = c, это все равно не поможет).

Мне кажется, что вы совершенно не понимаете, как работают переменные Python. Я поддерживаю предложение из комментариев, чтобы прочитать:

https://nedbatchelder.com/text/names.html

...