카테고리 없음

3주차 배운점

barryjung 2023. 4. 2. 15:47

3주차를 지나오며 배운점을 적어본다.

 

[이번주 배운점]

<헷갈렸던 용어 정리>

- 함수 (function) : def로 정의하는 함수이다.

- 메소드 (method) :  클래스 안에서 정의하는 함수이다.

 

- 매개변수 (parameter) : 함수 내에서 받아올 값을 담을 변수이다.

- 인수 (argument) : 실제 함수를 실행할 때 담아주는 값을 말한다.

 

- 오브젝트 (object) : 인스턴스 등의 객체를 뜻한다.

- 인스턴스 (instance) : 클래스를 이용하여 실제 만들어낸 객체이다.

 


<mutable한 리스트와 딕셔너리>

과제 해설 시간에 알려주신 내용이다.

 

a = "hello world"
b = ["hello", "world"]

a_ = a
b_ = b

a_ += "!!"
b_.append("!!")

print (a)		#hello world
print (b)		#hello world !!

# immutable : str, int, float, bool
# mutable : dict, list

변수들은 대부분 imutable하지만 리스트와 딕셔너리는 mutable한 요소라고 하셨다.

그래서 예제처럼 b_를 가공해도 b에도 변경이 생긴다.

mutable한 요소들은 처음 선언될때 할당한 메모리를,

다른 변수에 대입할때도 동일하게 지정해준다고 한다.

그래서 쉬운 말로 바로가기 만들기와 같다고 할수 있다.

b_는 b의 바로 가기를 만든 것이다.

 

이러한 특징을 유의할 필요가 있다.

그럼에도 만약 필요하다면 리스트나 딕셔너리도 immutable한 요소처럼,

복사본 만들기 같은 동작을 하게 할수도 있는데

 

b_ = b[::]		#리스트의 경우
b_ = b.copy()		#딕셔너리의 경우

이렇게 하면 된다.

사용을 권장하지는 않는다고 하셨다.

※이런 복사본 만드는 동작을 얕은 복사라고 한다고 한다.

  (메모리 주소까지 복사하는게 깊은 복사)

 

(음.. 테스트를 하며 재밌는 차이를 알게 되었는데 정리가 되는데로 적어보겠다.)

 


[더 공부가 필요한 것들]

<문제 풀이에서>

- set(), counter()등 함수.

- map+lambda식 과 리스트 컴프리헨션 차이.

 

<과제 해설에서>

- 클래스 init에서 메소드를 담은 딕셔너리를 선언.

- items를 이용해서 딕셔너리 키와 값다 불러오기.

- enumrate를 이용한 반복문으로 i값 활용과 시작넘버를 1로 지정.

- set attr, get attr 활용.

 

<생각지 못했던 아이디어>

- 함수 목록 만들기를 딕셔너리로 활용한다.

  그래서 큰 딕셔너리를 만들고 그 안에 작은 딕셔너리로 필요한 정보, 함수를 묶어줄수 도 있다.

  확장성 면에서 유리해 보인다.