Python/파이썬 심화

파이썬 시퀀스 (4)

monstro 2025. 8. 7. 20:25
728x90
반응형

- 개요

파이썬의 시퀀스와 연관된 여러가지 정보를 알아본다

구성은 다음과 같다

  • 패킹과 언패킹 개요
  • 가변형 시퀀스와 불변형 시퀀스의 차이

 

1) 패킹과 언패킹

파이썬에서 패킹은 * 연산자를 사용하여 이뤄지며, 여러개의 값하나의 객체로 묶어서 관리하는 방법이다

따라서 패킹은 시퀀스를 만드는 방법 중 하나이며, 시퀀스 패킹된 결과물이 될 수 있다

언패킹동일하게 * 연산자를 사용하며, 패킹된 객체풀어서 여러개의 값을 반환한다

 

1) 언패킹의 사용예시

print(divmod(100, 9))
print(divmod(*(100, 9)))
print(*divmod(100, 9))

 

divmod 함수 인자로 두 개의 실수를 받아 좌변을 우변으로 나눴을 때의 몫과 나머지튜플로 반환한다

이때 튜플로 반환되는 값에서 * 연산자를 사용하여 튜플을 언패킹할 수 있다

 

 

실행 결과는 위와 같다

2번째 실행 결과에서는 인자로 받은 튜플을 언패킹하여 divmod 함수에 넘겨주었고,

3번째 실행 결과에서는 반환된 튜플을 언패킹하여 출력한다

 

2) 패킹의 사용예시

x, y, *rest = range(10)
print(x, y, rest)
x, y, *rest = range(2)
print(x, y, rest)
x, y, z, *rest = 1, 2, 3, 4, 5
print(x, y, rest)

 

이번에는 * 연산자를 사용하여 여러개의 값을 패킹한다

패킹 객체는 할당되지 않은 값부터 패킹하여 저장하고, 만약 값을 받지 못했다빈 시퀀스로 남게 된다

 

 

실행 결과는 위와 같다

2번째 실행 결과에서는 패킹된 객체값을 받지 못해 빈 시퀀스로 남는 것을 확인할 수 있다

3번째 실행 결과에서는 값이 할당된 3 이후의 값4와 5만이 패킹된 것을 확인할 수 있다

 

2) 가변형 시퀀스와 불변형 시퀀스의 차이점

# 가변형 시퀀스, 불변형 시퀀스 생성
l = [15, 20, 25]
t = (15, 20, 25)

# 각 시퀀스의 값과 메모리 주소 출력
print(l, id(l))
print(t, id(t))

# 각 시퀀스를 복사하여 생성한 후 대입
l = l * 2
t = t * 2
print(l, id(l))
print(t, id(t))

# 각 시퀀스를 복사하여 생성하며 대입
l *= 2
t *= 2
print(l, id(l))
print(t, id(t))

 

위와 같이 코드를 구성하였다

리스트 인스턴스l의 경우 가변형 시퀀스이고, 튜플 인스턴스t의 경우 불변형 시퀀스이다

 

수정하기 이전의 출력 결과

 

수정을 가하기 이전의 출력결과는 위와 같다

값이 잘 생성된 것을 확인할 수 있다

 

첫 번째 수정 이후의 출력 결과

 

첫 번째 수정을 가한 이후의 출력결과는 위와 같다

두 개의 시퀀스 모두 복사하여 생성한 후에 대입하였으므로 메모리 주소가 변경된 것을 확인할 수 있다

 

두 번째 수정 이후의 출력 결과

 

두 번째 수정을 가한 이후의 출력결과는 위와 같다

리스트와 다르게 튜플메모리 주소가 변경된 것을 확인할 수 있다

튜플은 불변성 시퀀스이므로 한번 할당되면 값을 변경할 수 없어 새로운 객체를 메모리에 저장하기 때문이다

 

따라서 정보의 수정빈번한 데이터를 저장하는 경우 가변성 시퀀스에 저장하는 것이 좋다

728x90
반응형

'Python > 파이썬 심화' 카테고리의 다른 글

파이썬 시퀀스 (6)  (0) 2025.08.12
파이썬 시퀀스 (5)  (0) 2025.08.07
파이썬 시퀀스 (3)  (0) 2025.08.05
파이썬 시퀀스 (2)  (0) 2025.08.05
파이썬 시퀀스 (1)  (0) 2025.08.05