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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,465评论 0 5
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,144评论 1 32
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,859评论 2 9
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,663评论 0 5
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,819评论 0 10