
파이썬 자료구조 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]
>>>'뱀'