위키북스 박응용 저 "점프 투 파이썬" 책을 읽고 정리한 내용입니다.

다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.

Overview

  1. None
  2. 숫자형
    • 정수형 : int, bool (불리언도 0,1의 정수로 분류)
    • 실수형 : float
  3. 순서가 존재하는 자료형
    • 불변형 : str, tuple, bytes
    • 가변형 : list
  4. 순서가 없는 자료형
    • 집합형 : set
    • 매핑형 : dict

자료구조, 자료형, 추상자료형

  1. 자료구조 : 데이터를 효과적으로 저장하고 접근 하기 위한 이론
  2. 자료형 : 데이터를 컴퓨터가 읽어들이는 방식 을 선언하는 것
  3. 추상 자료형 : 자료형의 연산 동작을 명기 한 것(실제 구현은 하지 않는다)

객체복사

  • a = copy.copy(b)
  • = 는 객체복사가 아니고 참조할당이므로 가변객체의 동기화를 막는 복사를 하고 싶으면 copy 모듈의 copy() 메소드를 쓰면 된다
  • 불변객체는 어차피 변경될일이 없으니 copy 를 써도 참조할당이 된다

깊은복사

  • a = copy.deepcopy(b)
  • 가변객체 내부에 가변객체가 있는경우, 즉, 이중 리스트같은 경우에는 copy() 를 해도 외부 리스트는 복사되지만 내부는 여전히 참조할당되어 내부의 가변객체가 변경되면 복사본도 같이 동기화되어 변경되게 된다
  • 이를 막고 내부까지 객체복사를 하는 방법이 바로 deepcopy() 이다.

가변객체와 불변객체

  1. 가변객체 : list, set, dict
    • 얘네들은 가변객체이다. 따라서 얘네들은 구성요소를 변경할 수 있고 변경하더라고 주소값이 달라지지 않는다
    • 변수를 가변객체 자료형으로 선언하면 그 변수도 가변성을 지닌다. 즉, 주소가 같다면 변경사항도 공유한다.
    • 따라서 두 변수를 = 연산을 하면 둘 다 같은 값과 주소를 가지게 되어 하나의 변경이 나머지 하나에도 영향을 미치게 된다
  2. 불변객체 : 나머지 전부
    • 불변객체는 말 그대로 변경이 불가능하다. 구성요소를 변경할 수 없거나 변경하면 주소값을 새로 할당받는다
    • 변수를 불변객체 자료형으로 선언하면 그 변수도 불변이 된다.
    • 즉, 주소가 같아도 변경사항을 공유하지 않고 변경과 즉시에 주소값도 바뀐다.
    • 따라서, 두 변수를 = 연산으로 같은 값을 넣어주면 같은 주소값을 가지지만 하나의 값이 바뀌게 되면 나머지 하나도 바뀌는게 아니고 값이 바뀐 변수의 주소값을 새로 할당해주고 나머지 하나의 주소와 값은 그대로이다

파이썬 숫자의 특징

  1. 파이썬의 숫자는 임의 정밀도(Arbitary-Precision) 를 가진다
    • c나 자바는 자료형당 크기가 정해져있는 고정 정밀도(Fixed-Precision)을 가진다. 즉, 이 범위를 넘어서면 오버플로우가 발생한다
    • 파이썬은 임의 정밀도를 가진다. 따라서 숫자의 크기에 따라 메모리 사용량이 달라진다. 따라서 오버플로우가 발생하지 않는다
  2. 파이썬은 숫자도 객체로 선언된다
    • c언어는 객체가 아닌 원시타입(Primitive Type)은 할당된 공간에 숫자만 저장한다. 따라서 사칙연산은 되지만 그 이상의 다양한 기능은 제공하지 않는다. 대신 빠르다는 장점이 있다
    • 자바는 원시타입과 객체타입을 모두 지원한다. 객체타입은 숫자이외에도 헤더에 다양한 정보를 갖고 있어 다양한 연산을 제공 한다. 대신 원시타입보다는 용량도 크고 느리다는 단점 이 있다
    • 파이썬은 숫자를 포함한 모든것이 객체로 선언된다 성능보다는 편의성을 중시하는 파이썬의 성향이 나타난다
    • 다만, 빠른 연산을 위해 NumPy라는 파이썬 라이브러리는 c로 작성되어 원시타입과 빠른 연산속도를 이용할 수 있다