본문 바로가기
Problem Solving

파이썬 리스트 값 복사와 레퍼런스 구별

by REAL IT 2023. 6. 28.
728x90

생애 첫 코딩테스트 참가를 위해서 공부중입니다.

 

누구나 자료구조와 알고리즘(Jay Wengrow, 개정 2판) 책을 보다가 팀원분께 질문을 받아서 7.9에 나오는 every_password라는 함수를 파이썬으로 구현해보았습니다.

 

every_password는 n을 인자로 받아서, n자릿수의 가능한 모든 알파벳 비밀번호를 순서대로 출력하는 함수입니다.

 

def every_password(n):

    password_list = [[chr(c)] for c in range(ord('a'), ord('z')+1)]
    password_list_next = []

    for i in range(n-1):
        for password in password_list:
            for c in range(ord('a'), ord('z')+1):
                password.append(chr(c))
                password_list_next.append(password.copy()) # 이 부분을 주의, 값을 복사해야 합니다.
                password.pop(-1)
        password_list = password_list_next
        password_list_next = []

    for password in password_list:
        for c in password:
            print(c, end='')
        print()

 

위 소스코드에서 password.copy() 부분을 password로 바꾸면 전혀 엉뚱한 결과가 나옵니다. 왜냐하면 리스트인 password의 값을 복사하지 않고, 레퍼런스를 연결해버리기 때문입니다.

 

리스트의 값을 복사할 때는 password.copy()와 같이 복사본을 이용하는 방식을 취해야 합니다.

 

 

'Problem Solving' 카테고리의 다른 글

using namespace std  (0) 2023.07.02
방송대 공략집 KNOU-HOW 배포  (0) 2023.07.02
방송대 A+ 받는 방법  (0) 2023.06.19
심심해서 쓰는 이산수학 공부 이유  (0) 2023.06.19
방송대 첫학기 공략집 버젼 0.1.2.  (2) 2023.06.18