Python 垃圾收集器删除int,但保存列表

Python 垃圾收集器删除int,但保存列表,python,garbage-collection,Python,Garbage Collection,我很好奇为什么,如果我制作了一个列表和一个int,并试图在gc.get_objects()中找到它,我只找到了列表。代码: import gc a = 1 b = [1, 2, 3] for obj in gc.get_objects(): if a is obj: print('Found: a') if b is obj: print('Found: b') print(a) 仅输出: 发现:b 一, 在gc.get_objects()中没

我很好奇为什么,如果我制作了一个列表和一个int,并试图在gc.get_objects()中找到它,我只找到了列表。代码:

import gc

a = 1
b = [1, 2, 3]
for obj in gc.get_objects():
    if a is obj:
        print('Found: a')
    if b is obj:
        print('Found: b')
print(a)
仅输出:

发现:b

一,


gc.get_objects()
中没有
a
,但我当然可以访问它。

您可以阅读python文档:

一般来说,不跟踪原子类型的实例,而跟踪非原子类型的实例(容器、用户定义的对象…)

需要注意的是,事实并非如此。添加此引文也是为了避免误导:

但是,可以进行一些特定于类型的优化,以抑制简单实例的垃圾收集器占用空间


您可以阅读python文档:

一般来说,不跟踪原子类型的实例,而跟踪非原子类型的实例(容器、用户定义的对象…)

需要注意的是,事实并非如此。添加此引文也是为了避免误导:

但是,可以进行一些特定于类型的优化,以抑制简单实例的垃圾收集器占用空间


并非所有对象都由垃圾收集器跟踪,事实上,这在
gc
中有说明。Python只使用垃圾收集器来清理引用计数可能丢失的对象(即循环引用引起的对象)。注意:“Python的标准C实现使用引用计数来检测不可访问的对象,并使用一个单独的机制来收集引用周期,定期执行一个周期检测算法来查找不可访问的周期并删除所涉及的对象。”这个单独的机制就是公开的
gc
。作为一种优化,循环检测器甚至不会跟踪许多类型,如
int
str
gc.get\u objects()
不会返回所有对象的列表。此外,此函数将找不到numpy数组。并非所有对象都由垃圾收集器跟踪,事实上,
gc
中已说明了这一点。Python只使用垃圾收集器来清理引用计数可能丢失的对象(即循环引用引起的对象)。注意:“Python的标准C实现使用引用计数来检测不可访问的对象,并使用一个单独的机制来收集引用周期,定期执行一个周期检测算法来查找不可访问的周期并删除所涉及的对象。”这个单独的机制就是公开的
gc
。作为一种优化,循环检测器甚至不会跟踪许多类型,如
int
str
gc.get\u objects()
不会返回所有对象的列表。此外,此函数将找不到numpy数组。