위키북스 박응용 저 "점프 투 파이썬" 책을 읽고 정리한 내용입니다.
다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.
Overview
None
- 숫자형
- 정수형 :
int
,bool
(불리언도 0,1의 정수로 분류) - 실수형 :
float
- 정수형 :
- 순서가 존재하는 자료형
- 불변형 :
str
,tuple
,bytes
- 가변형 :
list
- 불변형 :
- 순서가 없는 자료형
- 집합형 :
set
- 매핑형 :
dict
- 집합형 :
자료구조, 자료형, 추상자료형
- 자료구조 : 데이터를 효과적으로 저장하고 접근 하기 위한 이론
- 자료형 : 데이터를 컴퓨터가 읽어들이는 방식 을 선언하는 것
- 추상 자료형 : 자료형의 연산 동작을 명기 한 것(실제 구현은 하지 않는다)
객체복사
a = copy.copy(b)
=
는 객체복사가 아니고 참조할당이므로 가변객체의 동기화를 막는 복사를 하고 싶으면copy
모듈의copy()
메소드를 쓰면 된다- 불변객체는 어차피 변경될일이 없으니
copy
를 써도 참조할당이 된다
깊은복사
a = copy.deepcopy(b)
- 가변객체 내부에 가변객체가 있는경우, 즉, 이중 리스트같은 경우에는
copy()
를 해도 외부 리스트는 복사되지만 내부는 여전히 참조할당되어 내부의 가변객체가 변경되면 복사본도 같이 동기화되어 변경되게 된다 - 이를 막고 내부까지 객체복사를 하는 방법이 바로
deepcopy()
이다.
가변객체와 불변객체
- 가변객체 :
list
,set
,dict
- 얘네들은 가변객체이다. 따라서 얘네들은 구성요소를 변경할 수 있고 변경하더라고 주소값이 달라지지 않는다
- 변수를 가변객체 자료형으로 선언하면 그 변수도 가변성을 지닌다. 즉, 주소가 같다면 변경사항도 공유한다.
- 따라서 두 변수를
=
연산을 하면 둘 다 같은 값과 주소를 가지게 되어 하나의 변경이 나머지 하나에도 영향을 미치게 된다
- 불변객체 : 나머지 전부
- 불변객체는 말 그대로 변경이 불가능하다. 구성요소를 변경할 수 없거나 변경하면 주소값을 새로 할당받는다
- 변수를 불변객체 자료형으로 선언하면 그 변수도 불변이 된다.
- 즉, 주소가 같아도 변경사항을 공유하지 않고 변경과 즉시에 주소값도 바뀐다.
- 따라서, 두 변수를
=
연산으로 같은 값을 넣어주면 같은 주소값을 가지지만 하나의 값이 바뀌게 되면 나머지 하나도 바뀌는게 아니고 값이 바뀐 변수의 주소값을 새로 할당해주고 나머지 하나의 주소와 값은 그대로이다
파이썬 숫자의 특징
- 파이썬의 숫자는 임의 정밀도(Arbitary-Precision) 를 가진다
- c나 자바는 자료형당 크기가 정해져있는 고정 정밀도(Fixed-Precision)을 가진다. 즉, 이 범위를 넘어서면 오버플로우가 발생한다
- 파이썬은 임의 정밀도를 가진다. 따라서 숫자의 크기에 따라 메모리 사용량이 달라진다. 따라서 오버플로우가 발생하지 않는다
- 파이썬은 숫자도 객체로 선언된다
- c언어는 객체가 아닌 원시타입(Primitive Type)은 할당된 공간에 숫자만 저장한다. 따라서 사칙연산은 되지만 그 이상의 다양한 기능은 제공하지 않는다. 대신 빠르다는 장점이 있다
- 자바는 원시타입과 객체타입을 모두 지원한다. 객체타입은 숫자이외에도 헤더에 다양한 정보를 갖고 있어 다양한 연산을 제공 한다. 대신 원시타입보다는 용량도 크고 느리다는 단점 이 있다
- 파이썬은 숫자를 포함한 모든것이 객체로 선언된다 성능보다는 편의성을 중시하는 파이썬의 성향이 나타난다
- 다만, 빠른 연산을 위해 NumPy라는 파이썬 라이브러리는 c로 작성되어 원시타입과 빠른 연산속도를 이용할 수 있다