![]() |
1
4
它会导致内存泄漏。 创建对象时,它以refcount为1开始。只有当refcount变为0时,对象才会被删除。
第一个例子
:将新对象传递给窃取引用(取得所有权)的函数时,如
第三个例子
:将新对象传递给不窃取引用(生成新引用)的函数时,如
第二个例子
:将新对象传递给不窃取引用(生成新引用)的函数时,如
如果您想知道为什么python会同时使用任何非窃取函数,那么您只需要考虑一个不那么简单的情况。 如果你想把东西放进去 二 元组而不是一个?或者如果你想把它放在一个元组中,但是也要把它存储在一个C静态指针中,或者某个模块的全局变量中,或者其他什么地方?如果要将引用计数存储在两个位置,则需要将其增加2,而当局部变量消失时,引用计数将减少1。对于一个非常简单的例子,您只需创建一些东西并立即将其传递出去,引用窃取函数可以让您避免一个incref和一个decref,并且对一行代码很友好和方便。但对于任何更复杂的事情,这都没有意义。 |