Python 垃圾收集器的行为是否与 _ 单下划线变量名有任何不同,它真的是一个 "throwaway" 变量吗?

Does Python garbage collector behave any different with a _ single underscore variable name and is it really a "throwaway" variable?

想象一个假设情况,其中一个函数 returns 有两个值:一个您不感兴趣的庞大数据集和您想要的一个小摘要。如果您的脚本(非交互式 shell)具有类似

的代码
_, the_answer = deep_thought.ask(the_ultimate_question)

,垃圾收集器会不会将 _ 与任何其他名称区别开来,并且会比使用

更快地释放内存
mostly_harmless, the_answer = deep_thought.ask(the_ultimate_question)

假设 mostly_harmless 永远不会被使用。起初我认为它不会,但在阅读此后: 我开始怀疑。我希望这里有人知道答案或比我更快找到答案。

此外,对于奖励积分,它与

的性能比较如何
the_answer = deep_thought.ask(the_ultimate_question)[1]

?

注意:以下适用于 CPython(标准解释器)

要了解垃圾收集器,首先您必须了解什么是 name,什么是 object 以及什么是对象的引用计数

取下面函数

def foo():
    _ = {}

当函数被执行时,函数的本地字典和 CPython 内部持有的全局对象看起来像这样。 (这是一个过度简化的解释)

--------------------    ------------------------
| name | object_id |    | id | reference_count |
--------------------    ------------------------
| _    | 1         |    | 1  | 1               |

函数完成后,它的局部字典将被销毁,任何被引用的对象都会reference_count递减

                        ------------------------
                        | id | reference_count |
                        ------------------------
                        | 1  | 0               |

垃圾收集器最终会删除 ID 为 1 的对象,因为它不再有任何对它的引用,引用的名称(变量名称)无关紧要。

变量可以命名为任何东西,垃圾收集器只关心对象的引用计数