파이썬 알고리즘 인터뷰 - Day 1 #1

원종운·2020년 7월 16일
0

파이썬 자료형

원시타입(Primitive)

: 파이썬은 원시 타입을 지원하지 않는다.

숫자(Number)

: 숫자 정수형으로 int만을 제공, 파이썬 버전 2까지는 int, long을 각각 별도로 제공, int는 고정 정밀도 정수형, long은 임의 정밀도 정수형

정수(class int)

  • PEP 237을 통해 버전 2.4부터는 int가 충분하지 않으면 자동으로 long 타입으로 변경되는 구조로 변경되었으며, 오버플로가 발생하는 일은 사라짐.

  • PEP 237 로드맵에 따라 버전 3부터는 아예 int 단일형으로 통합, int는 임의 정밀도를 지원하며 더이상 고정 정밀도 정수형은 지원하지 않게됨.

P.S) 임의 정밀도로 처리하면 계산 속도가 저하되나, 숫자를 단일형으로 처리할 수 있으므로 언어를 매우 단순한 구조로 만들 수 있을 뿐만 아니라, 오버플로우를 고민하지 않아도 되어 기능과 안전을 위하여 속도를 어느정도 포기하는 방법이다.

불리언(class bool)

: 논리 자료형이나, 파이썬에서는 내부적으로 1(True), 0(False)로 처리되는 int의 서브클래스

매핑(Mapping)

: 키와 자료형으로 구성된 복합 자료형, 파이썬의 유일한 매핑 자료형으로는 딕셔너리가 있다.

딕셔너리(class dict)

a = {} # 빈 딕셔너리 선언
a = { 
	'age' : 14, 
	'name' : 'jongwoon' 
    } # 빈 딕셔너리가 아닌 아이템을 가지는 딕셔너리

집합형(Set Type)

: 중복된 값을 갖지 않는 자료형이며 입력 순서가 유지되지 않고, 중복된 값이 있을 경우 하나의 값만 유지합니다. 파이썬의 유일한 집합형 자료형으로는 set이 있다.

집합(class set)

 a = set() # 빈 집합을 선언
 a = { 1, 2, 3 } # 빈 집합이 아닌 값이 포함된 집합을 선언

시퀀스(Sequence)

: 특정 대상의 순서 있는 나열로 구성된 자료형이며 값을 변경할 수 없는 불변과, 변경할 수 있는 가변형으로 나뉜다. 가변형에는 리스트(class list), 불변형에는 문자열(class str), 튜플(class tuple), 바이트(class bytes)가 있다.

불변(Immutable) 시퀀스

문자열(class str)

: 문자의 순서 있는 나열로 문자열을 이루는 자료형이며, 값을 변경할 수 없다

  • 문자열 자료형의 값을 변경할 수 있다고 생각하는 것은, 실제로 값이 변경되는 것이 아니라, 참조하는 문자열이 변경되는 것이다.
a = 'abc' # a는 "abc"라는 문자열 객체를 참조 중
a = 'def' # a의 값이 "def"로 바뀌는 것이 아니라 "def" 라는 문자열 객체를 새롭게 참조
  • 실제로 값을 변경한 후, 메모리 주소를 출력하여보면 참조하는 메모리 주소가 변경되는 것을 확인할 수 있습니다.
a = 'abc' # a는 "abc"라는 문자열 객체를 참조
print(id(a)) # "abc"라는 객체의 주소를 출력
a = 'def' # 새로운 "def"라는 문자열 객체를 참조
print(id(a)) # 다른 문자열 객체를 참조하고 있으므로 위 결과와 아래 결과는 다르다.
  • [] 연산자를 사용하여, 값을 변경하려고 시도하여도 당연히 에러가 발생한다.
a = 'abc' # a는 "abc"라는 객체를 참조
a[1] = 'd' # 문자열은 불변 객체이므로 변경이 불가능, 에러 발생

가변(Mutable) 시퀀스

리스트(class list)

: 다양한 값들을 배열 형태의 순서 있는 나열로 구성하는 자료형이며 가변형 시퀀스이므로 자유롭게 값을 추가, 삭제할 수 있습니다.

  • 배열이 없는 파이썬에서는 list라는 시퀀스 타입이 사실상 배열의 역할을 수행하게 됩니다.
  • 동적 배열의 컨셉과 동일합니다.

객체(Object)

: 파이썬은 모든 것이 객체이며, 크게 불변 객체와 가변 객체로 나뉘어집니다.

클래스설명불변 객체
bool부울o
int정수o
float실수o
list리스트x
tuple리스트와 동일하나, 불변형이라는 것만 다르다o
str문자o
set중복된 값을 갖지 않는 집합 자료형x
dic딕셔너리x

불변(Immutable) 객체

: 불변 객체는 참조하는 값의 데이터가 변경되어도, 그 값을 참조하고 있는 불변 객체들은 변하지 않고, 영향을 받지 않는다. 값을 재 할당하는 것은 값을 변경하는 것이 아니라, 새로운 객체를 다시 참조하는 것이다.

 a = 10
 b = a # a, b 모두 동일한 10이라는 값을 가진 객체를 참조 중
 print(a) # 10 출력
 print(b) # 10 출력, 위와 출력결과가 동일
 a = 11 # a를 11로 바꿈. a의 참조 객체가 변경됨. 기존의 id(a)와는 다른 값
 print(b) # b는 11로 변경되지 않고, 불변 객체이므로 10으로 유지, 
 	  # 참조 객체 또한 그대로 유지(기존의 id(b)와 동일한 값)
  • 위 코드에서 반약 a가 11로 나중에 변경이 된다고 하여도, 변수 b는 정수형 불변 객체이므로 11로 변경되지 않고 여전히 10이다.

가변(Mutable) 객체

: 가변 객체는 참조하는 객체의 값이 데이터가 변경되면, 그 값을 참조하고 있는 객체에게 영향을 주며, 똑같이 변경된다.

a = [1, 2, 3, 4]
b = a # b가 a를 참조 ( a는 가변 객체인 리스트 자료형 )

a[2] = 10 # a[2]를 10으로 변경, a[2]가 참조하는 객체가 변경되는 것이므로, 
          # a[2]의 id값이 변경되어짐을 확인함으로서, 
          # 숫자는 불변객체라는 것을 다시 확인할 수 있었다. 기존의 id(a[2])와 다르다.
print(b[2]) # a[2]를 10으로 변경하였으나, b[2]도 같이 변경되어짐을 확인할 수 있다.
profile
Java, Python, JavaScript Lover

0개의 댓글