파이썬 자료구조 Chapter 02 깊은 복사와 슬라이싱 연산

파이썬 자료구조 Chapter 02 깊은 복사와 슬라이싱 연산

2021, May 12    

PART 자료구조 Contents


chapter 02 내장 시퀀스

내장 시퀀스sequence 타입

  • 멤버십membership연산 : in 키워드 사용
  • 크기 함수 : len(seq)
  • 슬라이싱slicing 속성 : seq[:1]
  • 반복성iterability : 반복문에 있는 데이터를 순회할 수 있음


파이썬의 5개 내장 시퀀스 타입

  • 문자열 'str'
  • 튜플 'tuple'
  • 리스트 'list'
  • 바이트 배열 'bytearray'
  • 바이트 'type'

생성 방법

l = []
type(l)
<class 'list'>

s = ""
type(s)
<class 'str'>

t = ()
type(t)
<class 'tuple'>

ba = bytearray(b"")
type(ba)
<class 'bytearray'>

b = bytes([])
type(b)
<class 'type'>

2.1 깊은 복사와 슬라이싱 연산

2.1.1 가변성

1장에서 배운 점 : 파이썬 숫자는 불변immutable

이번 장 : 가변mutable객체 타입에 대해.

가변 데이터 : 리스트, 바이트

불변 데이터(효율적가변 데이터보다) : 튜플, 문자열, 바이트

일부 컬렉션 데이터 타입은 불변 데이터 타입으로 인덱싱 가능


파이썬의 모든 변수는 객체 참조reference이므로 가변 객체를 복사할 때 매우 주의해야 함!

a = b 일때 a 는 실제 b가 가리키는 (참조하는) 곳을 가리킨다.

따라서 깊은 복사deep copy의 개념을 이해하는 것이 중요함.

Deep copy 예제

# 리스트(list)
myList = [1, 2, 3, 4]
newList = myList[:]
newList2 = list(myList2)

# 셋(set)
people = {"버피", "애인절", "자일스"}
slayers = people.copy()
slayers.discard("자일스")
slayers.remove("에인절")

slayers
>>>{'버피'}

people
>>>{'자일스', '버피', '애인절'}

# 딕셔너리(dict)
myDict = {"안녕" : "세상"}
newDict = myDict.copy()

# 기타 객체의 깊은 복사는 copy 모듈 사용
import copy
myObj = "다른 어떤 객체"
newObj = copy.copy(myObj) # 얕은 복사 (shallow copy)
newObj2 = copy.deepcopy(myObj) # 깊은 복사 (deep copy)

2.1.2 슬라이싱 연산자

seq[시작]
seq[시작:]
seq[시작: : 스텝]

# 오른쪽(맨 끝)부터 읽을 때는 음수로
word = '뱀파이어를 조심해!'
word[-1]
>>>'!'

word[-2]
>>>'해'

word[-2:]
>>>'뱀파이어를 조심'

word[-0]
>>>'뱀'

2.6 연습문제


2.6.1 문자열 전체 반전


2.6.2 문자열 단어 단위로 반전



2.6.3 단순 문자열 압축


2.6.4 문자열 순열


2.6.5 회문