Подтвердить что ты не робот

Почему sys.getrefcount() возвращает 2?

Как я понимаю, sys.getrefcount() возвращает количество ссылок объекта, которое должно быть "1" в следующем случае:

import sys,numpy
a = numpy.array([1.2,3.4])
print sys.getrefcount(a)

Однако оказалось, что 2! Итак, если я:

del a

Будет ли существовать "numpy.array([1.2.3.4]) объект (нет сборки мусора)?

4b9b3361

Ответ 1

Когда вы вызываете getrefcount(), ссылка копируется по значению в аргумент функции, временно нажимая счетчик ссылок на объект. Вот откуда берется вторая ссылка.

Это объясняется в документации:

Возвращаемый счет, как правило, выше, чем вы могли ожидать, потому что он включает (временную) ссылку в качестве аргумента для getrefcount().

Что касается вашего второго вопроса:

Если "del a", будет ли существовать "numpy.array([1.2.3.4]) объект (нет сборки мусора)?

К моменту завершения getrefcount() счетчик ссылок массива будет возвращаться к 1, а последующий del a освободит память.