이번 포스팅은 Python-basic의 마지막 포스팅인 List와 dictionary 사용 시 유의점입니다.
프로그래밍을 하다보면 선언된 변수를 다른 변수에 대입하거나 복사를 하는 경우가 있습니다.
이 경우, 다른 자료형에서는 크게 발생하지는 않지만, List나 dictionary에서 발생할 수 있는
오류 및 이유, 그리고 대처 방법에 대해서 포스팅해보려고 합니다.
먼저 아래의 코드들을 보겠습니다.
4개의 요소를 가지는 리스트 list1을 list1_1로 대입하고,
list1_1에 5의 값을 추가하는 코드입니다.
코드상으로 문제도 없고, 실행 시에도 에러는 발생하지 않습니다.
그러면 무엇이 문제인지 실행 결과를 보겠습니다.
5의 요소를 append한 것은 list1_1이지만, list1에도 요소 5가 append 된 것을 알 수 있습니다.
이러한 현상일 발생하는 것은 alias현상 때문인데요.
리스트의 경우 1개의 리스트가 선언된 이후 위의 코드처럼
list1_1 = list1
의 방식으로 대입할 경우, 새로운 리스트가 생성되는 것이 아니라,
우리가 PC의 바탕화면에 만들어지는 바로가기처럼 기존 list1에 접근할 수 있는
또 하나의 경로가 생성이 되는 것입니다.
즉, list1과 list1_1은 접근 경로만 다르지 동일한 리스트를 가리키고 있는 것입니다.
그렇기 때문에 list1_1에 요소를 append 하여도 원본이라 할 수 있는 list1에도 요소가 추가되는 것입니다.
이런 현상을 방지하기 위해서는 다음과 같이 리스트를 명확하게 복사하면 됩니다.
신규 생성 리스트 이름 = list(복사하려는 리스트 이름)
다음의 코드를 보면 list2를 복사할 때 위의 형식에 따라서,
list2_1 = list(list2)
의 형식으로 사용하였습니다.
실행 결과를 보면 list2_1에 대해서만 요소 5가 추가된 것을 확인할 수 있습니다.
dictionary에 대해서도 확인해 보겠습니다.
3개의 데이터 쌍을 가지는 dict1을 dict1_1에 대입하고,
이후 dict1_1에 ('d':4)의 데이터 쌍을 추가한 코드입니다.
실행 결과를 보면 list에서와 동일하게 dict1과 dict1_1 모두에게,
('d': 4)의 데이터 쌍이 추가된 것을 알 수 있습니다.
이런 현상을 방지하기 위해서 dictionary의 복사 시에 다음과 같이 선언하면 됩니다.
신규 생성 dictionary 이름 = dict(복사하려는 dictionary이름)
다음의 코드를 보면 dict2를 복사할 때 위의 형식처럼
dict2_1 = dict(dict2)
로 선언한 것을 확인할 수 있습니다.
실행 결과를 보면, dict2_1에만 ('d' : 4)의 데이터 쌍이 추가된 것을 알 수 있습니다.
이번 포스팅에서는 list와 dictionary 사용 시 발생할 수 있는 allias에 대해서 알아보았습니다.
포스팅에 사용된 캡처 이미지의 코드는 아래 파일에 포함되어 있으니 참고하시면 됩니다.
'Coding, Testing, Challenge > python-basic' 카테고리의 다른 글
Python 사전형 자료형(dictionary) (0) | 2021.01.03 |
---|---|
Python for문과 range문 (0) | 2021.01.02 |
Python 리스트 메소드 (0) | 2021.01.01 |
Python 리스트 정렬 (0) | 2020.12.31 |
Python 리스트 함수 (0) | 2020.12.30 |