# Sequence Data Type
Sequence Data Type
Sequence 자료형은 여러 원자로 구성된 자료형으로, 데이터가 순서대로 저장되고 검색이 가능한 특징을 가지고 있다. 다양한 클래스가 존재하며, 각 클래스는 고유의 특성과 사용 방법을 가지고 있다.
Sequence 자료형의 주요 특징
- 다양한 클래스 존재:
- 문자열(str)
- 리스트(List)
- 튜플(Tuple)
- 바이트(bytes)
- 바이트 배열(bytearray)
- 데이터의 순서:
- 데이터가 순서에 따라 저장됩니다.
- 연속적인 순서에 따라 데이터를 검색할 수 있다.
- 인덱스를 이용하여 개별 원소를 검색할 수 있다.
- 슬라이싱을 통해 부분 검색이 가능하다.
- 동일 타입 및 다양한 객체:
- 동일한 타입의 원소를 가질 수 있다.
- 리스트처럼 다양한 객체를 원소로 가질 수도 있다.
- 변경 가능성:
- 특정 자료형은 한 번 생성되면 원소를 변경할 수 없다.
- 다른 경우에는 원소들을 변경할 수 있다.
Sequence 자료형의 종류별 특징
- 문자열(str):
- UniCode 문자의 순서대로 처리된다.
- 한 번 생성되면 원소를 변경할 수 없다.
- bytes, bytearray:
- ASCII 문자의 순서대로 처리된다.
- bytes는 한 번 생성되면 원소를 변경할 수 없지만, bytearray는 변경이 가능하다.
- List, Tuple:
- 다양한 객체를 포함할 수 있다.
- List는 생성된 후 원소 추가, 변경이 가능하다.
- Tuple은 한 번 생성되면 원소를 변경할 수 없다.
데이터 불변성
- 문자열(str), Tuple, bytes:
- 한 번 생성되면 원소를 변경할 수 없다.
- List, bytearray:
- 생성된 후 원소를 추가하거나 변경할 수 있다.
내부 메서드의 처리 방식
- 변경 가능한 자료형(List 등):
- 내부 메서드가 실행되면 내부 원소를 변경한다.
- 변경 불가능한 자료형(문자열 등):
- 내부 메서드가 실행되면 새로운 인스턴스를 생성한다.
- 생성자로 생성할 때 기존에 만들어진 인스턴스에 대해서는 새로 만든 것이 아니라 만들어져 있는 것을 반환하는 interning 처리를 수행한다.
1. Sequence 자료형의 특징
1.1 Runtime에 속성 추가 여부
- 파이썬 내장 자료형은 런타임에 속성의 추가가 불가능함
- Cython엔진이 실행되는 Python의 경우 , # Cython는 c언어를 통해 제공되는 확장 모듈
- C 언어로 제공되는 공통기능에 대한 일관성을 유지하기 위하여 내장 자료형은 변경할 수 없도록 차단함
- 클래스나 인스턴스에서 속성이나 메서드를 관리하는 네임스페이스(__ dict __) 속성이 없는 경우
- 접근해서 갱신, 삭제를 하는 것이 불가능함, 추가도 불가능
- 내부에 만들어진 속성이나 메서드만 사용 가능
- 다른 기능과 속성을 추가하고 싶을 때는 클래스를 상속받고 사용자 클래스를 만들어서 추가 속성과 기능의 확장을 이용함
- Cython엔진이 실행되는 Python의 경우 , # Cython는 c언어를 통해 제공되는 확장 모듈
- Sequence 내장 타입의 인스턴스 Namespce 미존재
- List를 리터럴로 생성하고 이 List 인스턴스에 네임스페이스를 조회하면 예외가 발생함
- 내부 속성에 네임스페이스(__dict__)가 존재하지 않음
AttributeError: 'list' object has no attribute '__dict__'
- 리스트를 상속한 List 클래스를 정의하고 추가적인 속성으로 name을 만든 후
- List 클래스의 인스턴스를 생성하고 네임스페이스를 확인하면 name 속성이 있는 것을 알 수 있음
{'name': '리스트'}
- 리스트에 대한 원소들은 부모 클래스 리스트 내부에 생성했으므로 부모 리스트 클래스의 메서드를 그대로 사용해서 처리가 가능함
[1, 2, 3, 1, 2, 3]
{'name': '리스트'}
1.2 변경 가능 여부: Mutable & Immutable
- 변경 가능(Mutable)과 변경 불가능(Immutable)에 대한 기본 개념 중 변경 가능하다는 말은 객체 내부의 원소들을 추가, 삭제, 변경할 수 있다는 의미이지만 객체 자신을 변경할 수 있다는 말은 아님
1.2.1 문자열은 변경 불가
문자열을 리터럴로 정의하고 첫번째 원소의 값을 변경할 경우, 변경이 불가능하다는 예외가 발생한다.
TypeError: 'str' object does not support item assignment
- 변경할 수 없다는 뜻은 변경하기 위한 기능이 없다, 즉 __ setitem __ 메서드가 만들어져 있지 않다는 의미임
AttributeError: type object 'str' has no attribute '__setitem__'
1.2.2 Tuple은 변경 불가
- Tuple을 리터럴로 정의하고 첫 번째 원소의 값을 변경할 경우, 문자열과 동일하게 원소 변경이 불가능하다는 예외가 발생함
고
TypeError: 'tuple' object does not support item assignment
- 변경할 수 없다는 뜻은 Tuple 역시 변경하기 위한 __ setitem __ 메서드가 만들어져 있지 않다는 의미임
AttributeError: type object 'tuple' has no attribute '__setitem__'
1.2.3 변경 가능한(Mutable) 자료형
- 어떤 내용을 직접 인덱싱 했을때 바뀌는 것
<class 'list'>
['김', '민', '수']
<slot wrapper '__setitem__' of 'list' objects>
<slot wrapper '__delitem__' of 'list' objects>
1.3 Collection 여부
- Collection이란 다양한 원소를 가진 데이터 구조를 말함(Sequence 자료형은 기본적으로 Collection)
- Collection 여부는 원소 개수, 포함 관계, 반복 가능 여부를 확인할 수 있으면 됨
1.3.1 자료형 내의 원소의 개수 확인: len()
- 파이썬 3 버전에서는 문자열이 UniCode로 되어 있으므로 문자코드 단위, 즉 문자 단위로 길이를 표시함(주의 : 바이트 단위가 아님, 한글과 영어의 len 가 차이가 나지 않는다(바이트 단위가 아니므로))
3
3
1.3.2 반복형을 반복자로 변환: iter()
- Sequence 자료형들은 내부에 원소들이 없거나 연속적으로 들어 있어 반복해서 원소를 읽을 수 있으므로 반복형(Iterable)으로 처리가 가능함
- 반복자를 생성하는 iter() 함수로 호출하려면 내부에 반드시 __ iter __ 스페셜 메서드가 존재해야 함
- 그러나 기존 버전과의 호환성 유지를 위해 __ getitem __이 구현되어 잇으면 이를 호출해서 반복자로 처리하도록 만들어 줌
<str_iterator object at 0x7d1217b7f610>
강
대
형
- 리스트도 반복자로 만들어서 사용이 가능하다.
<list_iterator object at 0x78f5e59aaec0>
고
요
한
1.3.3 Sequence 자료형 내에 원소 포함여부 확인: in 연산자
True
True
1.4 Sequence 자료형 내의 메서드 처리 기준
1.4.1 내장 메서드 처리 기준
- 변경 가능한 자료형의 메소드는 내부를 갱신 해줌(리스트는 변경 가능한 부분임)
None
['가', '고', '한']
- 변경 불가능한 경우는 별도의 객체를 만들어서 반환 처리 (문자열은 변경 불가능한 부분임)
- replace는 명이라는 것을 찾아서 한 이라는 글자로 바꿔라
- 별도의 인스턴스를 만들어서 그 값을 리턴시켜 바꿈처리함
137516661143664 강대명
137516660898384 강대한
1.5 interning 처리
- interning 이란?
- 기존에 만들어진 변경이 불가능한 Sequence 자료형이 있을 경우
- 생성자를 통해 인스턴스를 다시 생성하면
- 새로운 인스턴스를 만드는 것이 아니라 기존에 있는 것을 불러다 반환하는 처리 방식
- 변경불가능한 자료형의 interning 처리
튜플
개체 자체가 동일한 개체
True
True
리스트
- 개체가 그대로 들고와서 쓰는것이 아님으로 별도의 개체
- 내용은 같다 ==하면 같은 값이지만, 개체는 다른 개체이다.
False
변경되는 자료형과 변경 불가능한 자료형은 서로 다르다라는 것을 알기 위한 것이다.
2. 문자열 자료형
- 파이썬 버전 3부터 문자의 기본 코드가 UniCode로 변경되면서 다양한 언어로 처리가 가능해 짐
- 파이썬 버전 2의 Unicode 클래스가 사라지고 대신 bytes 클래스가 사용되면서 기본적인 byte 처리는 bytes 클래스로 수행하게 됨
- 리터럴과 생성자로 문자열 생성
123 <class 'str'>
성대현 <class 'str'>
123.0 <class 'str'>
파이썬 <class 'str'>
2.2 문자열 주요 메서드
- 대소문자 처리
upper() : 소문자 대문자로 변환
lower() : 대문자 소문자로 변환
SPIDERMAN
wonder women
title() : 타이틀만 대문자
Wonder Women
capitalize() : 첫 글자만 대문자
Spiderman
casefold() : 모든 문자열을 소문자로 변환
wonder women
- 문자열의 위치를 조정해서 꾸미기
center : 가운데 정렬
%%%%%%%%%%빅데이터와 인공지능%%%%%%%%%%
빅데이터와 인공지능
ljust : 왼쪽 정렬
빅데이터와 인공지능%%%%%%%%%%%%%%%%%%%%
빅데이터와 인공지능
rjust: 오른쪽 정렬
%%%%%%%%%%%%%%%%%%%%빅데이터와 인공지능
빅데이터와 인공지능
- 특정 문자 찾기
- find('찾고자하는 문자')
- rfind = 오른쪽으로 찾기
6
찾
14
찾
- index = 해당하는 인덱스 가져오기, find와 동일한 결과값 가져옴
6
찾
14
찾
- s.count = 우리가 찾는 글자가 몇개인지 나타냄
2
'PYTHON-BACK' 카테고리의 다른 글
#파이썬 기초 6일차_1 (0) | 2024.07.04 |
---|---|
#파이썬 기초 5일차_1 (1) | 2024.07.03 |
#파이썬 기초 4일차_1 (0) | 2024.07.02 |
#파이썬 기초 3일차 (1) | 2024.07.01 |
#파이썬 기초 2일차 (0) | 2024.06.28 |