파이선에서 n차원 배열을 초기화 할 일은 꽤 많습니다. 어제도 그러한 코드를 작성했거든요. n = 2일 때만 작성해 보도록 하겠습니다. n > 2이상일 때는 2일 때만 잘 응용하면 되기 때문입니다. 어떻게 해야 하는지 예제 코드들을 보도록 하겠습니다. 요구 사항은 int형 Object를 저장할 2차원 배열을 만들라는 것입니다. 저는 9x9짜리 배열을 만들었습니다. 그런데, 이 코드는 어떻게 동작할까요? 저는 2번째 줄에서 arr[0][0]만 1로 바꾸었습니다. 그런데, arr[0][0]과 arr[1][0]을 출력해 보니, 둘 다 1이 나왔습니다. 왜 그럴까요? 어디선가 주소값만 복사되는 얕은 복사가 일어났기 때문입니다. python에서 id는 해당 객체의 값을 얻어오는 코드입니다. 9개의 루프를 돌면서 ..
얕은복사 검색 결과
어레이리스트의 addAll 메서드의 성능에 대한 글이 간혹 보입니다. 메서드 내부를 뜯어 보면서, 어디서 오버헤드가 걸리는지 알아보도록 하겠습니다. 먼저 Main 클래스의 main 함수 내에 있는 코드는 아래와 같습니다. 생각보다 복잡하지 않습니다. 그냥 단순히 90개의 Integer를 x에 넣어놓고 List x에 있는 것들을 모두 y에 add하는 작업을 하는 코드입니다. addAll 안으로 들어가 보겠습니다. 가장 먼저 보이는 것은 c를 toArray로 바꾸는 것입니다. 즉, ArrayList c를 Array로 바꾸는 작업을 먼저 하는데요. 여기서 무슨 일을 하는지 안으로 들어가 보겠습니다. 일단 581번째 줄의 c는 무엇을 의미할까요? 90개의 Integer가 들어있는 ArrayList를 의미합니다...
파이썬을 공부할 때도 얕은 복사, 깊은 복사에 대한 이야기는 상당히 많이 나옵니다. 톡이나 메일로 받은 질문 중에서 높은 빈도로 있었던 것 중 하나였습니다. 얕은 복사는 주솟값을 복사합니다. 즉, 사본이 바뀐다면 원본도 바뀝니다. 깊은 복사는 내용물을 복사합니다. 그렇기 때문에, 사본을 복사해도 원본이 바뀌지 않습니다. 간단한 예제 프로그램을 보면서 이해해 봅시다. 프로그램 1을 봅시다. 저는 Monster 객체 2개를 생성했습니다. 하나는 hp가 3700이고 데미지가 270인 몬스터를 생성했습니다. 그리고 다른 하나 b에는 a를 집어 넣었는데요. 이 때 어떤 일이 일어나는지 봅시다. a는 새로 생성된 객체를 가리킬 겁니다. 그런데 b에다가 a의 값을 넣었어요. 그러면 b도 같은 객체를 가리킬 겁니다. ..
최근댓글