python 列表值传递_python – 按值传递列表

我想通过值将列表传递给函数.

默认情况下,列表和其他复杂对象通过引用传递给函数.

这是一些决定:

def add_at_rank(ad, rank):

result_ = copy.copy(ad)

.. do something with result_

return result_

这可以写得更短吗?

换句话说,我不想改变广告.

解决方法:

您可以使用[:],但对于包含列表(或其他可变对象)的列表,您应该使用copy.deepcopy():

lis [:]等同于list(lis)或copy.copy(lis),并返回列表的浅表副本.

In [33]: def func(lis):

print id(lis)

....:

In [34]: lis = [1,2,3]

In [35]: id(lis)

Out[35]: 158354604

In [36]: func(lis[:])

158065836

何时使用deepcopy():

In [41]: lis = [range(3), list('abc')]

In [42]: id(lis)

Out[42]: 158066124

In [44]: lis1=lis[:]

In [45]: id(lis1)

Out[45]: 158499244 # different than lis, but the inner lists are still same

In [46]: [id(x) for x in lis1] = =[id(y) for y in lis]

Out[46]: True

In [47]: lis2 = copy.deepcopy(lis)

In [48]: [id(x) for x in lis2] == [id(y) for y in lis]

Out[48]: False

标签:python,pass-by-value

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值