Engineering Note

[Python] 함수의 매개변수로 리스트 전달하기 본문

Programming Language/Python

[Python] 함수의 매개변수로 리스트 전달하기

Software Engineer Kim 2022. 1. 5. 13:51

파이썬에서 함수의 매개 변수로 리스트를 전달할 때 일반 변수와 차이점이 있다. 일반변수를 함수의 매개변수로 전달할때 값만 전달된다. 이를 call-by-value라고 한다. 그러나 리스트는 값이 아닌 주값이 전달된다. 이를 call-by-reference라고한다. 이때 리스트는 call-by-reference로 동작하기 때문에 전달받은 리스트 매개변수로 함수 내부에서 값을 변경하면 함수 외부에서도 값이 변경된다.

def nomal_val_swap(a,b):
    temp = a
    a = b
    b = temp


def list_swap(list_val):
    temp = list_val[0] 
    list_val[0] = list_val[1]
    list_val[1]= temp

a = 10
b = 20
list_val = [10,20]

print("before variable swapping:",a,b)
nomal_val_swap(a,b)
print("after variable swapping:",a,b)

print("--------------------------------")

print("before list swapping:",list_val)
list_swap(list_val)
print("after list swapping:", list_val)

이때 파이썬에서는 c언어와 다르게 리스트도 함수의 매개변수로 선언하고 값복사가 가능하도록 해주는 기능이 있습니다. deepcopy()함수를 사용하는 것입니다. 이렇게 deepcopy()를 통해 리스트의 값을 복사하여 전달하면 함수 내부에서 값을 바꾸더라도 함수 외부의 list의 값은 바뀌지 않습니다.

from copy import deepcopy

def list_swap(list_val):
    temp = list_val[0] 
    list_val[0] = list_val[1]
    list_val[1]= temp


list_val = [10,20]

print("before list swapping with deepcopy():",list_val)
list_swap(list_val)
print("after list swappingwith deepcopy():", list_val)

print("--------------------------------")

list_val = [10,20]
print("before list swapping with deepcopy():",list_val)
list_swap(deepcopy(list_val))
print("after list swappingwith deepcopy():", list_val)

'Programming Language > Python' 카테고리의 다른 글

[Python] int 함수  (0) 2022.01.30
[Python] Dictionary  (0) 2022.01.11
[Python] sorted 와 sort 차이  (0) 2021.12.30
[Python] combinations, permutations 함수  (0) 2021.12.30
[Python] 파이썬의 특별한 변수 __name__  (0) 2021.12.17
Comments