pythondef元组参数传递_Python参数传递(传值&传引用)

# 测试参数是传值还是传引用

def test(arg):

print("test before")

print(id(arg))

arg[1]=30 # 测试可变对象

# arg[3][2] = 16 # 测试嵌套类型

# arg = list(range(5))

print("test after")

print(id(arg))

return arg

change_loc = 1

if change_loc == 1:

# 传入可变对象

my_list = list(range(5))

print(my_list)

print(id(my_list))

test(my_list)

print(my_list)

print(id(my_list))

else:

# 传入不可变对象(元组中嵌套列表)

my_tuple = (3,5,"abc",my_list) # list(range(6)不能在元组中直接写创建列表可以替换成创建好的列表对象

print(my_tuple[3][2]) # 要测试修改的元组中列表的某个元素

print(id(my_tuple)) # 传入前元组引用

print(id(my_tuple[3])) # 传入前元组中列表引用

test(my_tuple)

print(my_tuple[3][2]) # 要测试修改后的元组中列表的某个元素

print(id(my_tuple)) # 传入后元组引用

print(id(my_tuple[3])) # 传入后元组中列表引用

# Python参数传递采用的是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。

# 如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。

# 如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值‘来传递对象。

总结:函数传值时如果传不可变对象,就不能修改原始值;传可变变量就能改原始值。如果传嵌套的数据类型(例如:("you",[‘Jack‘, ‘Rose‘])) 元组中包含列表或[{‘Tom‘, ‘Jim‘, ‘Mary‘},{‘Jack‘, ‘Rose‘}] 列表中包含集合等)修改限制从外及内,直接相连的两层外层限制内层,不直接相连的没有直接影响。就拿元组包含列表为例:元组不能直接修改,因此元组内的各个数据的引用不能修改;列表支持修改,因此可以修改元组内列表中的数据,这并不影响元组本身的不可修改性,因为列表的引用没变;元组对其内列表中的数据没有直接影响力,其它嵌套结构分析类似!!!

测试结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值