将列表传递给值函数

发布于 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 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以使用[:],但是对于包含列表(或其他可变对象)的列表,您应该使用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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看