파이썬에서 두 변수가 가리키는 메모리 주소가 같으면 서로의 에일리어스(alias)라고 말한다.
문자열처럼 그 자체의 값이 변경 불가능한 값은 에일리어스를 생성해도 안전하지만,
리스트(list) 같은 가변적인 값은 에일리어스를 생성하게 되면 프로그램의 흐름이 개발자의 의도와 다르게 흘러갈 수 있다.
예시
list1 = [1,2,3,4,5]
list2 = list1 #list1과 list2는 alias
list1[0]=0 #list1[0]값 변경
print(list1)
print(list2)
>>[0, 2, 3, 4, 5]
>>[0, 2, 3, 4, 5] #list2[0]값도 변경된 것을 볼 수 있다.
list1과 list2는 같은 리스트를 참조하고 있고, 인덱싱을 이용해 새로운 리스트를 생성하는 것이 아니라 list1[0]의 값을 "변경"하게 되므로 이와 같은 결과가 나타난다. (두 리스트가 함께 참조하고 있는 리스트의 값을 변경)
한 리스트와 그 리스트를 인수로 받은 매개변수도 서로 에일리어스 관계이다.
def remove_list(L:list) ->None:
del L[0] #매개변수 L의 값을 변경 (L과 아래의 list1은 같은 리스트를 참조)
list1 = [1,2,3,4,5]
remove_list(list1) #L == list1
print(list1)
>>[2,3,4,5]
list1의 값을 복사해서 L에게 전달해주는 것으로 보일 수 있으나 실제로는 list1이 가리키는 주소 값을 전달해 주는 것이다.
'Python' 카테고리의 다른 글
Python - with 문 (0) | 2020.08.01 |
---|---|
Python - is와 ==의 차이 (and,or,&,|) (1) | 2020.07.29 |
Python - 모듈(module) (0) | 2020.07.27 |
Python - 단락 평가(Short-circuit Evaluation) (0) | 2020.07.26 |
Python - 사용자 입력(input()) (0) | 2020.07.26 |