파이썬에서 A = [1,2,3]와 A[:] = [1,2,3]의 차이
회사에서 파이썬을 사용한다. 덕분에 파이썬 고수들이 많다. 그 덕에 찾아도 못 찾는 지식들의 해답을 찾을 수 있어서 좋다. 이번 것도 그 중의 하나이다. A = [1, 2, 3]과 A[:] = [1, 2, 3] 은 어떤 차이가 있을까. 한 동안 나는 이것이 어째서 다른지 이해되지 않았다. 그렇다고 검색 엔진에 조회하기도 애매한 질문이다. 내게 알려준 분은 예제 코드를 제시하면서 설명해줬는데, 백문이 불여일견이었다. 이 둘은 사실 용법 차이이며, 왜 다른지 인식하려면 그 편이 명확하다. 좌측은 객체가 생성되었다. 우측은 참조의 값을 바꾼 셈이 되었다. 파이썬의 디스어셈블리 모듈(dis)을 사용하면 좀더 확연히 알 수 있다. 아래 그림에서 31 STORE_FAST를 보자. a에 새로운 주소가 할당되었다. 이..
2012. 3. 13.
셀프 넘버들의 합 구하기
오밤중에 심심해서 이런 일을 했다. 퀴즈를 푸는 일. 1번 설명 어떤 자연수 n이 있을 때, d(n)을 n의 각 자릿수 숫자들과 n 자신을 더한 숫자라고 정의하자. 예를 들어 d(91) = 9 + 1 + 91 = 101 이 때, n을 d(n)의 제네레이터(generator)라고 한다. 위의 예에서 91은 101의 제네레이터이다. 어떤 숫자들은 하나 이상의 제네레이터를 가지고 있는데, 101의 제네레이터는 91 뿐 아니라 100도 있다. 그런데 반대로, 제네레이터가 없는 숫자들도 있으며, 이런 숫자를 인도의 수학자 Kaprekar가 셀프 넘버(self-number)라 이름 붙였다. 예를 들어 1, 3, 5, 7, 9, 20, 31 은 셀프 넘버 들이다. 1번 문제 1 이상이고 5000 보다 작은 모든 셀프..
2012. 1. 14.