什么是引用窃取和借用?
在阅读Python的C接口文档时,有一些术语提到了“引用窃取”和“借用”。这些是什么意思呢?
1 个回答
20
正如用户2864740所提到的,这些术语在Python C API文档的“介绍”页面的引用计数详情部分中有定义。以下是相关段落:
在Python/C API中,函数的引用计数行为最好用“引用的拥有权”来解释。拥有权是指对引用的控制,而不是对对象的控制(对象是共享的,不是被拥有的)。“拥有一个引用”意味着当这个引用不再需要时,负责调用Py_DECREF来减少它的引用计数。拥有权也可以转移,这意味着接收引用的代码将负责在不再需要时调用Py_DECREF()或Py_XDECREF()来减少引用计数,或者把这个责任传递给其他代码(通常是调用它的代码)。当一个函数把引用的拥有权传递给调用者时,称调用者获得了一个新引用。如果没有转移拥有权,调用者则是借用了这个引用。对于借用的引用,不需要做任何处理。
相反,当一个调用函数传入一个对象的引用时,有两种可能性:这个函数要么窃取了这个对象的引用,要么没有。窃取引用意味着当你把一个引用传给一个函数时,这个函数就认为它现在拥有这个引用,而你就不再需要负责这个引用了。