본문 바로가기

노력/인공지능

1. 파이썬 개인공부 1 (데이터 타입)

  • 숫자형 : 이뮤터블(immutable)이고, 시퀀스형이 아니다.
  • 문자열 : 
  1. str->sequence
  2. bytes->ascii code, immutable
  3. bytearray->mutable

  • 시퀀스 형 : 순서가 있는 형
  1. str(unicode)
  2. bytes
  3. bytearray
  4. list
  5. tuple
  6. range
  • 뮤터블 : 자기 자신이 변할 수 있는 컨테이너
  1. list
  2. bytearray


c = 'wow'

id(c) : c의 메모리 주소를 나타낸다.


"wow""baby" : 이런 식으로 사용할 수도 있지만 +를 사용하는 것이 직관력을 더 높인다.


id(d) -> 1498240120200

d = d + [4]

id(4) -> 1498240633544


 - 이 현상에서 알 수 있는 것은 파이썬에도 가비지컬렉션이 있다는 것이다.



d.append(5)

d

id(5) -> 1498240633544


 - d의 실제 값이 바뀌었음에도 가리키는 주소가 같다. 이런 것을 mutable이라고 한다.



c = (1, 2, 3)

immutable 자기가 가진 id에서 절대로 다른 id로 바뀔 수 없다.



- 속도에 민감한 경우 리스트 대신 튜플을 사용할 수 있다. (속도에 민감한 경우 뮤터블 대신 이뮤터블을 사용할 수 있다.)



a=[1,2,]

b=(1,)


b=(1)과 같이 사용하면 b는 그냥 int가 된다.

그렇기 때문에 b=(1,)처럼 일부러 콤마를 넣어서 사용해야 1이라는 값이 있는 튜플이 된다.



b=1,2,

이런 형태로 저장해도 튜플로 저장된다.



x, y = 1, 2

x에는 1, y에는 2가 저장된다.


x, y = 1, 2, 3

양 변의 갯수가 다르다면 에러가 발생한다.


x, *y = 1, 2, 3

별표를 달고 있으면 나머지를 뜻한다. x에는 1만 들어가고 나머지 값들인 2, 3은 리스트의 형태로 y에 들어간다.



x, *y, z = 1,2,3,4,5,6

x = 1

y = [2,3,4,5] : 리스트 방식으로 결과가 나온다.

z = 6




dir(a) -> a라는 변수를 가지고 쓸 수 있는 메소드들이 무엇인지 알 수 있다.




__함수이름__ : 파이썬이 갖는 방식, 스페셜 메소드, 매직 메소드라고 한다. 파이썬의 내부 메소드(?)



a : [1, 2]

a.append([3])

a : [1, 2, [3]]


시퀀스에서 하나 딱 찝어서 말할 수 있는 것이면 iterable이다.


b.extend([6]) : extend는 리스트 뒤에 extend 안에 이어서 추가된다.

b.append([7]) : append는 리스트 자체가 리스트에 추가된다.


[1, 2, 3, 4, 5, 4, 6, [7]] -> 마지막의 6, 7이 extend와 append로 추가된 것이다.




  •  set
 집합은 순서와 중복이 없다. mutable type -> 인덱스와 슬라이싱이 불가능하다.

 y = frozenset({1,2,3})
 immutable로 된 집합이다.
 

  •  dictionary
 집합과 같이 순서가 없다.
 
 d = {'a':1, 'd':'x'} -> 앞에 있는 key와 뒤에 있는 value로 이루어져 있다.
 
 인덱스에러 -> 없는 인덱스 참조
 키에러 -> 딕셔너리에서 없는 키 참조
 


 a=[1,2,3,4,5]

 a[1:]='t'

 a -> [1, 't']

 

 파이썬도 다중상속 언어이다, 자바는 인터페이스, C++은 다중상속 언어이다.

 

 문자열, list, tuple, set, dictionary(세 가지 관점의 이터러블) - 이터러블 가능

 

 dictionary view : 키 관점, 밸류 관점, 키와 밸류를 동시에 포함하는 관점(items) 이 세 개로 순환가능하다.



 b = {'a':1,'b':2,'c':5}

 b.keys() : dict_keys(['a', 'b', 'c'])

 b.values() : dict_values([1, 2, 5])

 b.items() : dict_items([('a', 1), ('b', 2), ('c', 5)])

 

 range(10) : range(0, 10)

 range(3, 10) : range(3, 10)

 range(3, 10, 2) : 3, 5, 7, 9

 

 a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 a[::2]

 

 두 개 마다

 

 a[::-1] : [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]



for i in (이터러블): -> 이터러블이기 때문에 올 수 있는 것.


in은 멤버십 연산자 (동시에 키워드이다.)


 

 1 in [1, 2, 3] : True

 

 '1' in '1', '2', '3' : (True, '2', '3') 

 

  -연산자 우선순위에서 ,보다 in이 앞서기 때문에 True, '2', '3'이 되는 것이다.

 

 1 not in  ('1', '2', '3') : True

 

  -not in으로 안에 있는지 없는지 파악가능

  

 keyword.kwlist

 

 container : 원소가 2가지 이상이면 모두 container이다. (숫자, 문자를 묶으면 컨테이너)


 파이썬은 앞에서부터 계산한다.

 

 - None, 존재하지 않는다(null). 아무 값도 아니다.

 

 a = None -> 값

 

 이름 = 식(값)

 

 - 할당문, 선언문, 조건문, 반복문, 예외처리문 : 문의 특징은 마칠 때 콜론을 사용한다.