Pass list to function by value

后端 未结 4 1686
南旧
南旧 2020-12-06 18:24

I want to pass a list into function by value. By default, lists and other complex objects passed to function by reference. Here is some desision:

def add_at_         


        
4条回答
  •  眼角桃花
    2020-12-06 19:17

    You can use [:], but for list containing lists(or other mutable objects) you should go for copy.deepcopy():

    lis[:] is equivalent to list(lis) or copy.copy(lis), and returns a shallow copy of the list.

    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
    

    When to use 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
    

提交回复
热议问题