Python中list与dictionary作为函数的形参时,会该改变 实参

python 中,数据类型分为 可变(mutable) 和 不可变(unmutable)。
例如 integers, floats, strings, booleans, tuples 皆为 不可变的。
但 list 和 dictionaries 时可变的。 这意味着,当函数有 list 或者 dictionary 作为形参时, 会改变其 实参的值(在函数中若改动其值)。
(对比, 在c或者c++ 中,函数调用 发生的数据传递时单向的, 即, 只能把实参的值 传递给形参, 而不能把形参的值传给实参。在函数调用中, 形参的改动并不会影响实参。)

initial_list = [1, 2, 3]

def duplicate_last(a_list):
    last_element = a_list[-1]
    a_list.append(last_element)
    return a_list

new_list = duplicate_last(a_list = initial_list)
print(new_list)
print(initial_list)
[1, 2, 3, 3]
[1, 2, 3, 3]

这种性质在某些情况下很有用, 但是 若不想 实参的值收到影响, 可以使用[].copy 方法。list 和dictionary 都有 copy 方法。

initial_list = [1, 2, 3]

def duplicate_last(a_list):
    last_element = a_list[-1]
    a_list.append(last_element)
    return a_list

new_list = duplicate_last(initial_list.copy())
print(new_list)
print(initial_list)
[1, 2, 3, 3]
[1, 2, 3,]

参考: https://www.dataquest.io/blog/tutorial-functions-modify-lists-dictionaries-python

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值