python方法中接收一个对象作为参数时,如何在方法体中删除这个对象?

结论是无法删除,因为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

但是,如果在函数方法中修改此对象,因为传递的是引用,所以在函数内部直接修改此对象,函数外指向此对象的变量也会获取到修改之后的值.

你可能感兴趣的:(python方法中接收一个对象作为参数时,如何在方法体中删除这个对象?)