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

首先, 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指向这个新的对象,在进行修改。

 

 

 

不可变对象 :  tuple  forzenset tuple、str 和 bytes。

可变对象: list bytearray、array.array、collections.deque memoryview。

 

posted @   DRQ丶  阅读(666)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示