结论是无法删除,因为python函数实际上接收的是对象引用,不是真正对象。直接在函数中del
对象只是删除了函数中此对象的变量名到此对象的引用而已,而在函数外层还是存在此对象的额外引用。所以python的垃圾回收机制不会删除此对象。
outside_obj = {
'a': 'hello',
}
def del_obj(obj):
del(obj)
del_obj(outside_obj)
print(outside_obj) # {'a': 'hello'}
而且如果说在函数内部将此参数更改为None
值也是不行的,此时只是将此函数的形参赋值了None
,真正的对象在函数体外部还是存在一个变量引用它。
outside_obj = {
'a': 'hello',
}
def del_obj(obj):
obj = None
del_obj(outside_obj)
print(outside_obj) # {'a': 'hello'}
这点与PHP不一样,php通过引用传值&
传递给函数的变量,如果函数内部将其改为null
,函数外部变量直线的值也直接改为了null
。
$outsideObj = [
'a' => 'hello',
];
function delObj(&$obj)
{
$obj = null;
}
delObj($outsideObj);
var_dump($outsideObj); //NUll
但是,如果在函数方法中修改此对象,因为传递的是引用,所以在函数内部直接修改此对象,函数外指向此对象的变量也会获取到修改之后的值.