본문 바로가기

Coding, Testing, Challenge/python-basic

Python List와 dictionary 사용시 유의점

728x90

이번 포스팅은 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에 대해서 알아보았습니다.

포스팅에 사용된 캡처 이미지의 코드는 아래 파일에 포함되어 있으니 참고하시면 됩니다.

test_19.py
0.00MB

 

 

'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