首页 > 编程语言 > 详细

python的传参方式,哪些是可变对象,哪些是不可变对象?

时间:2020-03-02 22:46:01      阅读:76      评论:0      收藏:0      [点我收藏+]

首先, python的传参方式叫做  共享传参  (call by object), 其实就是引用的副本

我们知道,有的语言函数的参数,传递的是引用,就是指向这个对象的指针, 有的语言传递的是参数的拷贝值。

但是python不一样,它传递的是对象的引用(简单说就是形参和实参指向同一个对象)。再根据对象是否可变,表现出两种情况。

 

 

首先看代码, 这个是可变类型的例子。

def flist(l):
    l.append(0)
    print(l)

ll = []
flist(ll)
flist(ll)

结果是: [0] 

     [0,0]

 

首先我们创建了一个[], 我们用 ll 来指向这个[], 指向的是这个地址。

然后调用函数,在函数内部, 用l 来指向传入的ll, 第一次调用函数,l指向了ll, 第二次调用, 函数内部重新定义了一个l, 同样指向了ll。

 

我们再看第二个例子

def fstr(s):
    s += "a"
    print(s)

ss = "hehe"
fstr(ss)
fstr(ss)

结果是: hehea

    hehea

其实和上面类似,但是在函数内部,s指向了ss的时候, 发现,这个对象是个不可变对象,对创建了一个副本,然后再把s指向这个新的对象,在进行修改。

 

 

 

不可变对象 : bool/int/float/tuple/str/forzenset

可变对象: list/dict/set

 

python的传参方式,哪些是可变对象,哪些是不可变对象?

原文:https://www.cnblogs.com/dairuiquan/p/12398574.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!