파이썬에서 두 변수가 가리키는 메모리 주소가 같으면 서로의 에일리어스(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

+ Recent posts