zoukankan      html  css  js  c++  java
  • python中的参数传递和返回值

    python中的参数传递类似java,有着自己的内存回收机制,这和C++有着很大的差别。

    1.函数的参数传递:

    >>> a = [1, 2, 3]
    >>> def fun(a):
            for i in a:
                print i
    a.append(4)
    >>> fun(a) 1 2 3 44807792 >>> a [1, 2, 3, 4]

    从上面的结果可以看出,python的函数传递是引用传递,因此,在函数体内修改对象内容会导致函数外面的对象内容改变。

    这个对于一些内置类型,如int,float是不成立的。

    注意,如果在函数内对传进来的参数做del操作是不会对实际对象产生影响的,因为del删除的是该引用,而实际对象的引用数至少为1,所以不会被回收。

    2.函数的返回:

    >>> def fun():
            a = [1, 2, 3]
            print id(a)
            return a
    >>> a = fun()
    44806192
    >>> id(a)
    44806192
    >>> def fun():
            a = 1
            print id(a)
            return a
    >>> a = fun()
    34243104
    >>> id(a)
    34243104

    可以看出,函数返回的也是对象的引用,而对象此时的引用计数为1,所以不会被内存回收。

    这在C++中是肯定错误的,但是python有自己的内存回收机制,因此是没问题的。

    3.总结:

    python和java类似,没有指向对象的指针,每个对象都是靠引用对其进行操作,因此在函数传递和函数返回时,通过对同一个对象的引用实现了对同一个对象的操作。当函数调用结束时,对象的内存不会消失,但是引用本身会被回收。

  • 相关阅读:
    jQuery jsonp(转载)
    vue jsonp (转载)
    Win10系统 开机总是黑屏一分钟 然后才进入解锁界面?
    Win10怎么取消开机密码
    Qt启动报错“0xc0000005”错误?
    公司转让债务问题怎么处理
    从车载激光点云数据轨迹数据中提取坐高斯标数据
    macbook air和pro的ppi
    任务管理器是灰色的
    python列表删除某个元素
  • 原文地址:https://www.cnblogs.com/chybot/p/4558956.html
Copyright © 2011-2022 走看看