参数的传递-可变对象-不可变对象

参数的传递-可变对象-不可变对象

python中参数的传递都是"引用传递":
1.对“可变对象”进行“写操作”,直接作用于源对象本身
2.对“不可变对象”进行“写操作”,会产生一个新的“对象空间”,并用新的值填充这块空间。(起到其它语言的“值传递”效果,但不是“值传递”。

可变对象:字典、列表、集合、自定义对象等
不可变对象:数字、字符串、元组、function等

测试参数的传递:

1.传递可变对象
a = [10,20]
print(id(a)) #输出:2589181890952
print(a)  #输出:[10, 20]
print("*********************************")
def tast01(m):
    print(id(m))  #输出:2589181890952
    m.append(300)
    print(id(m))  #输出:2589181890952

tast01(a)
print(a)  #输出:[10, 20, 300]
1.传递不可变对象

传递参数是不可变对象(例如:int、float、字符串、元组、布尔值),实际传递的还是对象的作用。在“赋值操作”时,由于不可变对象无法修改,系统会新创建一个对象。

a = 100

def f1(n):
    print("n:", id(n))  #输出:n: 140709868121584
    #传递进来的是a对象的地址
    n = n + 200
    #由于a是不可变对象,因此创建新的对象n
    print("n:", id(n))  #输出:n: 2203606353456
    #n已经变成了新的对象
    print(n) #输出:300

f1(a)
print("a:", id(a)) #输出:a: 140709868121584

#显然,通过id值我们可以看到n和a一开始是同一个对象。给n赋值后,n是新的对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值