Я только что обнаружил ответ сам.
Причина в том, что специальная переменная _
по-прежнему содержит результат последней оценки.
Последняя оценка была list.pop()
, а ее результат был NumberWord("zero")
.
Пока этот результат все еще сохраняется в _
, у нас будет сильная ссылка, а слабая ссылка не исчезнет go.
Мы можем подтвердить эта теория, вызвав еще одну оценку. В этот момент _
будет содержать другое значение, а слабая ссылка будет go отсутствовать:
Если мы выполним следующие дополнительные операторы в конце примера выше:
_
5 + 5
_
print(f"[F] {len(dict)}")
print(f"dict.get(0) = {dict.get(0)}")
print(f"dict.get(1) = {dict.get(1)}")
Тогда мы получим следующий вывод:
>>> _
zero
>>> 5 + 5
10
>>> _
10
>>> print(f"[F] {len(dict)}")
[F] 0
>>> print(f"dict.get(0) = {dict.get(0)}")
dict.get(0) = None
>>> print(f"dict.get(1) = {dict.get(1)}")
dict.get(1) = None