Python,结果与文档不一致:对象已删除但引用仍然很弱 'active'

Python, inconsistent results vs docs: object deleted but weak ref still 'active'

关于这个主题有很多问题我已经检查过。 Example dated 2014!

还可以找到 'canonical' 文档 here

我不知道为什么我无法复制文档:

import weakref, gc
class A:
    pass
a = A()
b = weakref.ref(a)
a
Out[5]: <__main__.A at 0x250f782f3a0>
b()
Out[6]: <__main__.A at 0x250f782f3a0>
del a
b()
Out[8]: <__main__.A at 0x250f782f3a0>
gc.collect()
Out[9]: 9
b()
Out[10]: <__main__.A at 0x250f782f3a0>

b 应该返回 None 但不是。

编辑

有趣的是,this question 我也很感兴趣,但几年后仍未得到答复。只是标记以防有人可以同时解决这两个问题。

(Windows 10, python 3.8, 康达环境)

我尝试了问题评论中提到的内容,并出于文档目的发布了一个答案。 运行 REPL 中的上述代码是问题所在。

我尝试了什么:

test.py:

if __name__ == '__main__':
    import weakref, gc
    class A: pass
    a = A()
    b = weakref.ref(a)
    print("a: ", a)
    print("b(): ", b())
    del a
    print("b(): ", b())
    gc.collect()
    print("b(): ", b())

$ python test.py:

a:  <__main__.A object at 0x000002678F96A400>
b():  <__main__.A object at 0x000002678F96A400>
b():  None
b():  None

Process finished with exit code 0

所以它确实像记录的那样工作。