将列表传递给值函数
发布于 2021-01-29 18:01:41
我想按值将列表传递给函数。默认情况下,列表和其他复杂对象通过引用传递给函数。这是一些目标:
def add_at_rank(ad, rank):
result_ = copy.copy(ad)
.. do something with result_
return result_
可以写得短些吗?换句话说,我不想更改 ad 。
关注者
0
被浏览
53
1 个回答
-
您可以使用
[:]
,但是对于包含列表(或其他可变对象)的列表,您应该使用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