#!/usr/bin/env python # coding: utf-8 # *** # *** # # 4. 리스트, 튜플, 사전 및 내장 자료형 특성 # *** # *** # *** # ## 1 리스트, 튜플, 사전 # *** # ### 1-1 리스트(list)의 정의와 리스트 기본 연산 # - 리스트: 임의의 객체를 순차적으로 저장하는 집합적 자료형 # - 문자열이 지닌 대부분의 연산들은 리스트도 지원 # In[2]: L = [1,2,3] print(type(L)) print() print(len(L)) print() print(L[1]) print(L[-1]) print(L[1:3]) print() print(L + L) print(L * 3) print() print(L) # - 리스트의 원소는 변경 가능 # In[3]: l1 = [4,5,6] l1[0] = 10 print(l1) # ![image](../images/changeListElement.png) # - 동일한 변수에 다른 리스트를 할당하는 것은 해당 변수의 레퍼런스를 변경함 # In[4]: l1 = [1,2,3] l1 = [4,5,6] print(l1) # ![image](../images/referenceChangeList.png) # ### 1-2 range() 함수를 통한 인덱스 리스트 생성 # - range(k): 0부터 k-1까지의 range object를 반환함 (python3) # - python2 에서는 list 객체를 반환 # In[5]: L = range(10) print(L) print(L[::2]) print(L[::-1]) print(4 in L) print() print(list(L)) print(list(L)[::2]) print(list(L)[::-1]) # ### 1-3 튜플(tuple)의 정의와 기본 연산 # - 튜플: 리스트와 유사하지만 튜플 내의 값을 변경할 수 없음(immutable하다.) # - 적합한 사용 예 # - months = ('January','February','March','April','May','June','July','August','September','October','November',' December') # - 각 값에 대해 인덱스가 부여됨 # - 문자열이 지닌 대부분의 연산들은 튜플도 지원 # In[5]: t = (1,2,3) print(len(t)) print() print(t[0]) print(t[-1]) print(t[0:2]) print(t[::2]) print() print(t + t + t) print(t * 3) print() print(3 in t) # ### 1-4 튜플의 상수적 성격 # - 튜플은 내용 변경 불가(immutable) # In[6]: t = (1,2,3) t[0] = 100 # - 반면에 리스트는 내용 변경 가능(mutable) # In[7]: L = [1,2,3] L[0] = 100 print(L) # ### 1-5 사전(dictionary; dict)의 정의와 기본 사용법 # - 정수형 인덱스가 아닌 키(key)를 이용하여 값(value)을 저장하는 자료 구조 # - 저장된 각 자료에 대한 순서는 의미 없음 # - 매핑(Mapping) 함수와 비슷한 역할을 함 # - x라는 키값을 넣으면 값 y를 반환함 # In[6]: d = {'one': 'hana', 'two': 'dul', 'three': 'set'} print(d['one']) # In[9]: d = {'one': 'hana', 'two': 'dul', 'three': 'set'} d['four'] = 'net' # 새 항목의 삽입 print(d) d['one'] = 1 # 기존 항목의 값 변경 print(d) print('one' in d) # 키에 대한 멤버쉽 테스트 # In[6]: d = {'one': 1, 'two': 'dul', 'three': 'set', 'four': 'net'} print(d.keys()) # 키만 dict_keys 객체로 추출(Python3.6), 키만 리스트로 추출(Python2.7) print(d.values()) # 값만 dict_values 객체로 추출(Python3.6), 값만 리스트로 추출(Python2.7) print(d.items()) # 키와 값의 튜플을 dict_items 객체로 추출(Python 3.6), 키와 값의 튜플을 리스트로 반환함(Python2.7) # ['four', 'three', 'two', 'one'] # ['net', 'set', 'dul', 1] # [('four', 'net'), ('three', 'set'), ('two', 'dul'), ('one', 1)] # *** # ## 2 내장 자료형의 정리와 객체 신원 파악 # *** # ### 2-1 내장 자료형의 특성 정리 # | 자료형 | 저장/접근 방법 | 변경 가능성 | 저장 모델 | # |:------:|:-----------------:|:-----------:|:--------------------:| # | 수치형 | 직접(Direct) | 변경불가능(Immutable) | 리터럴 (Literal) | # | 문자열 | 시퀀스 (Sequence) | 변경불가능(Immutable) | 리터럴 (Literal) | # | 리스트 | 시퀀스 (Sequence) | 변경가능(Mutable) | 컨테이너 (Container) | # | 튜플 | 시퀀스 (Sequence) | 변경불가능(Immutable) | 컨테이너 (Container) | # | 사전 | 매핑 (Mapping) | 변경가능(Mutable) | 컨테이너 (Container) | # ### 2-2 내장 자료형 알아보기 # In[7]: print(type(3)) #정수 print(type(3.3)) #실수 print(type('abc')) #문자열 # # # # In[8]: print(type([])) #리스트 print(type(())) #튜플 print(type({})) #사전(dict) # # # # - 자료형의 비교 # In[9]: a = 0 L = [1,2,3] print(type(a) == type(0)) print(type(L) == type([])) print(type(L[0]) == type(0)) # In[10]: print(type(None)) # NoneType 객체, 아무 값도 없음을 나타내는 객체 print() a = None print(a) print(type(a)) # # None # # ### 2-3 객체의 신원 식별하기 # - id(): 객체의 식별자를 반환한다. # In[13]: a = 500 b = a print(id(a)) print(id(b)) print() # 작은 값의 정수는 계속하여 별도로 객체를 생성하지 않음 x = 1 y = 1 print(id(x)) print(id(y)) print() # 작은 값의 정수는 별도로 객체를 생성 x = 1000000000000000000 y = 1000000000000000000 print(id(x)) print(id(y)) # - is 키워드: 두 객체의 식별자가 동일한지 테스트한다. # In[14]: c = [1,2,3] d = [1,2,3] print(c is d) a = 500 b = a print(a is b) x = 1 y = 1 print(x is y) e = f = [4,5,6] print(e is f) # - == 연산자: 두 객체의 값이 동일한지를 테스트한다. # In[17]: c = [1,2,3] d = [1,2,3] print(c == d) # In[18]: x = 1 y = 1 print(x is y) print(id(x) == id(y)) print(x == y) # In[19]: x = 900000000 y = 900000000 print(x is y) print(id(x) == id(y)) print(x == y) # ### 2-4. 레퍼런스 카운트 (Reference Count)와 쓰레기 수집 (Garbage Collection) # # In[9]: x = y = z = 100 #

참고 문헌: 파이썬(열혈강의)(개정판 VER.2), 이강성, FreeLec, 2005년 8월 29일