순서가 없는 데이터 구조
셋(set)
- Set이란 중복되는 요소가 없이, 순서에 상관없는 데이터들의 묶음
- 데이터의 중복을 허용하지 않기 때문에 중복되는 원소가 있다면 하나만 저장
- 순서가 없기 때문에 인덱스를 이용한 접근 불가능
- 수학에서의 집합을 표현한 컨테이너
- 집합 연산이 가능(여집합을 표현하는 연산자는 별도로 존재 X)
- 중복된 값이 존재하지 않음
- 담고 있는 요소를 삽입 변경, 삭제 가능 -> 가변 자료형(mutable)
- set 메서드
** 알아둘 것
- .remove(elem) : set에서 삭제하고, 없으면 KeyError
- .discard(elem) : set에서 삭제하고 없어도 에러가 발생하지 않음
딕셔너리(Dictionary)
- 키 - 값 (key-value) 쌍으로 이뤄진 자료형
- Dictionary의 키(key)
- key는 변경 불가능한 데이터 (immutable)만 활용 가능
- string, integer, float, boolean, tuple, range
- 각 키의 값(values)
- 어떠한 형태든 관계없음
- 딕셔너리 메서드
얕은 복사와 깊은 복사 (Shallow Copy & Deep Copy)
자료형과 메모리
- 기존 변수 사용 과정의 문제점 : 하나의 기억에 하나의 주소가 필요
- 연속된 공간에 데이터가 저장되도록 함 -> 맨 처음 기억의 주소만 가지고 있으면 됨
할당(assignment)
대입 연산자 (=) : 리스트 복사 확인하기
얕은 복사 (shallow copy)
slice 연산자를 활용하여 같은 원소를 가진 리스트지만 연산된 결과를 복사(다른 주소)
a=[1,2,3]
b=a[:]
print(a,b) # [1,2,3] [1,2,3]
b[0]=5
print(a,b) # [1,2,3] [5,2,3]
얕은 복사 주의사항 - 복사하는 리스트의 원소가 주소를 참조하는 경우
a=[1,2,['a','b']]
b=a[:]
print(a,b) # [1,2,['a','b']] [1,2,['a','b']]
b[2][0] =0
print(a,b) # [1,2,[0,'b']] [1,2,[0,'b']]
깊은 복사(deep copy) - 리스트 복사 확인하기
import copy
a=[1,2,['a','b']]
b=copy.deepcopy(a)
print(a,b) # [1,2,['a','b']] [1,2,['a','b']]
b[2][0] =0
print(a,b) # [1,2,['a','b']] [1,2,[0,'b']]
- 리스트를 복사하고 싶다면 무조건 print 찍어볼 것 (혹은 디버깅 툴로 리스트 변화 확인)
반응형
'Algorithm > Algorithm Theory' 카테고리의 다른 글
[Python] 07.객체 지향 프로그래밍2 + 에러와 예외 (0) | 2023.02.05 |
---|---|
[Python] 06.객체 지향 프로그래밍1 (1) | 2023.02.05 |
[Python] 04.데이터 구조1 (0) | 2023.02.05 |
[Python] 03.함수 응용 (0) | 2023.02.05 |
[Python] 02.함수 기본 (0) | 2023.02.05 |