zoukankan      html  css  js  c++  java
  • python函数值传递还是引用传递

    c/c++中有值传递引用传递的区别。但是python中是值传递还是引用传递呢?首先看python中对变量的定义

    “python中变量是指向某个内存的, 而内存中的内容是不可变的。”

    python的函数调用中,传递的是变量所指向的地址,但仍然很难说它是按照引用还是按照值传递。 比如:

    >>> a=1  # 定义变量 a=1
    >>> def f(v):  # 定义函数,接受参数并改变其值为2
    ...     v=2
    ...     return v
    ... 
    >>> id(a)  # a的地址是10243176
    10243176
    >>> f(a)  # 用f调用a
    2
    >>> id(a)  # a的地址仍然是10243176
    10243176
        >>> a  # a的值仍然也是1
        1
    

    这里虽然传递进 f的是a指向的内存地址, 但由于指向的地址不可变,所以在v=2的时候,其实是新创建了一个变量,并且把其指向2. 因此调用完成后,看起来像是按值传递

    再比如

    >>> l = [1,2,3,]
    >>> f = lambda x:x.append(4)
    >>> id(l)
    140526430340592
    >>> f(l)
    >>> id(l)
    140526430340592
    >>> l
    [1, 2, 3, 4]
    

    这里, 传递的l 在经过f调用后 其值发生了变化,但可以看到它指向的地址仍然没变。 这看起来又像是按引用传递。

    所以,python中很难说是按照引用传递还是按照值传递,因为python中变量指向的对象有时候是可变的,有时候是不可变的。 所以如果对象是可变的,如列表,字典则是按照引用传递,如果对象是不可变的如tuple则是按照值传递

  • 相关阅读:
    规矩与管理
    信息系统叫设施比叫工具更贴近本义
    让ansbile和docker愉快的在一起
    elasearch基础教程
    markdown语法
    python 实用pickle序列化
    python 解析配置文件
    ansible状态管理
    haproxy官方配置文档地址
    ansible操作模块相关
  • 原文地址:https://www.cnblogs.com/kramer/p/6053983.html
Copyright © 2011-2022 走看看