(알고공부 D-3)


# 책 공부

오늘은 do it 자료구조와 알고리즘 파이썬편 2-2강을 공부했다

배운건 3가지 (2개는 겹치므로 1-1, 1-2로 쓰겠다)


1-1. 따로따로 생성한 리스트, 튜플의 동일성 판단(is)

* 동등성 (==) : 객체의 값이 같은가?

* 동일성 (is) : 참조한 객체가 같은가?


값(원소)이 같은 리스트, 튜플일지라도 참조한 객체는 다르다. 즉 식별번호(동일성)이 다르다

ex)

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

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

lst1 == lst2 >> True

lst1 is lst2 >> False


* lst1가 참조한 객체의 값과 lst2가 참조한 객체의 값은 같음 (==) -> True

* lst1가 참조한 객체와 lst2가 참조한 객체는 다름 (is) -> False


is는 조건문에서 is None으로 잘 쓰이던데 한 번 각잡고 is None을 사용한 조건식을 만들어봐야겠다



1-2. 함수 사이 인수 전달 정리

* 함수 실행 시점에서 매개변수는 실제 인수와 같은 객체를 참조

* 함수에서 매개변수의 값을 변경하면 인수의 형(뮤터블, 이뮤터블)에 따라 구분됨


a) 이뮤터블(튜플, string, 일반적인 자료형 (int, float, string 등)) -> 여기서는 int





b) 뮤터블 (리스트, 딕셔너리) -> 여기서는 list




파이썬에서는 매개변수에 실제 인수가 대입(객체 참조에 대한 전달)하는 구조로 함수 사이에 인자를 주고받는다.

이 때 대입에서 복사되는 것은 값이 아니라 참조하는 곳이다.

이 사진에서 함수 호출하는 곳에서, 함수로 전달하는 실제 인수는 x이다.


1) 뮤터블 인수 : 함수 안에서 매개변수의 값을 변경하면 객체 자체를 업데이트

따라서 매개변수의 값을 변경하면 호출하는 쪽의 실제 인수는 값 변경


2) 이뮤터블 인수 : 함수 안에서 매개변수의 값을 변경하면 다른 객체를 생성하고 그 객체에 대한 참조로 업데이트

따라서 매개변수의 값을 변경해도 호출하는 쪽의 실제 인수에는 영향을 주지 않음


** 뮤터블 = 변경이 가능한(재정의 가능) 객체 = 리스트, 딕셔너리, 집합 등

이뮤터블 = 변경이 불가능한 객체 = tuple, string, 수(int, float) 등



2. if __name__ = '__main__'


이건 시발 1달 내내 봐도 모르겠음 오늘도 이해못함

다만 여기서 __name__은 모듈 이름을 나타내는 변수이고, 작성규칙이

- 스크립트 프로그램이 직접 실행될 때 변수 '__name__'은 '__main__'

- 스크립트 프로그램이 임포트될 때 변수 '__name__'은 원래 모듈의 이름

이라는걸 배웠는데...

아 ㅅㅂ 걍 모르겟음 좀 더 알아봐야할듯... ㄹㅇ루......



+ 얕은 복사(copy()) / 깊은 복사(deepcopy())가 참 신기했음... 학교 수업에서 걍 리스트 복사하려면 copy()함수 써야해요~ 라는 수준으로 끝났었는데

저런 구조인지는 첨 알았고 진짜 신기하드라... 근데 실제로 저거 많이 씀? 궁금하네



# 백준 2문제

브론즈 2 2292번 : 벌집, 브론즈 3 11034 캥거루 세마리2



# 내일 목표

내일은 2강 복습하고 3강 선형 검색에 대해 공부해야겠다.

아 그리고 "이것이 취업을 위한 코딩테스트다 with 파이썬" 풀어보려고 하는데 풀어본 사람있음? 어렵냐



다들 오늘 하루 수고했어 ㅇㅅㅇ 혹시라도 심심하면 내 글 보고 내가 오개념 쓴게 있다면 알려주면 고마울거같아...ㅇㅅㅇ... 졸면서 쓴거라 제정신이 아님..

그리고.... 혹시라도 똥싸는 시간에 if __name__ <- 이거 이해시켜준다면 너무나도 고마울거같아.. 그럼 가짜개발자는 자러감...