책 내용을 공부하다가 다음과 같은 개념을 보았다.
여기서 한 가지 중요한 점은 상한을 최악의 경우와 혼동하는 것인데, 빅오 표기법은 정확하게 쓰기에는 너무 길고 복잡한 함수를 ‘적당히 정확하게’ 표현하는 방법일 뿐, 최악의 경우나 평균적인 경우의 시간 복잡도와는 아무런 관계가 없는 개념이라는 점에 유의해야한다.
아니, 가장 늦게 실행될 때를 빅오(O), 즉 상한이라고 한다며?
그러면 그게 최악의 경우 아닌가? 이에 대한 구체적인 예시를 들어보자.
2018-19시즌에 시행되었던 한국프로농구 외국인 선수는 키가 2m를 넘을 수 없었다. A와 B는 이에 대한 대화를 나누는 중인데, A는 위 규정을 어렴풋이(?) 기억하고 있다. B는 위 규정에 대해 A에게 물어본다.
B : “그 때 KBL 외인들 키 제한을 얼마로 두고 뽑았더라?”
A : “음… 대략 2m 20cm 정도 내에서 뽑았을껄?
위 대화 내용을 상한과 최악의 경우에 맞춰 정리해보면,
이렇게 보면 최악의 경우는 상한에 포함되는 것으로 보인다.
키 제한 2m가 2m 20cm 안에 포함된다는 것이다.
만약 A가 상한을 2m 라고 말했으면 최악의 경우가 상한이 될 수는 있다.
하지만 똑같은 의미는 아니며, 어느정도 ‘적당히 정확하게’ 표현하는 방법이라는 것이다.
파이썬에는 불변 객체가 존재한다.
객체가 불변이라면, 다음과 같은 특징을 갖는다.
1. Thread Safe
2. Improve Correctness & Clarity
3. Mutable is harder to reason
다음 코드가 불변 객체를 이해하는데 큰 도움이 되었다.
myList = []
for i in range(10) :
myList.append(‘hello’)
for i in range(10) :
print(id(myList[i]))
결과 : myList 내 원소들의 모든 주소 값들은 전부 동일하다!