파이썬 배열 주소값 할당
https://leetcode.com/problems/remove-duplicates-from-sorted-array/
Remove Duplicates from Sorted Array - LeetCode
Can you solve this real interview question? Remove Duplicates from Sorted Array - Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place [https://en.wikipedia.org/wiki/In-place_algorithm] such that each unique element ap
leetcode.com
위의 코드를 보자. 아직 class 사용법이 완전히 익숙하지 못해 이것저것 테스트 해보는 중의 중간단계이다.
Solution class의 removeDuplicates라는 메서드는 nums라는 배열을 매개변수로 받아 [1,2,3]을 재할당하는 코드이다.
하지만 밑의 코드에서 nums를 출력해보면 여전히 값이 [4,5,6,7]로 유지된다.
그 이유는 무엇일까? 그 이유는 바로 c언어의 포인터 개념을 생각해보면 쉽다.
nums = [1,2,3]은 새로운 주소에 새로운 배열을 만든것이지 기존 nums의 주소에 값들을 변경해준 것이 아니다.
그러면 어떻게 하면 위의 코드를 고칠 수 있을까?
바로 nums[:]로 slice assignment를 해주면 된다.
아니면 nums.remove 후 nums.append를 하여도 좋고
for문으로 각 각의 배열의 index값을 일일이 바꿔도 좋다.
그치만, nums = [1,2,3] 처럼 새로운 배열을 만들면 안된다.
변수로 배열을 복사할때도 봐야한다.
b=[1,2,3]
a=b
는 a와 b가 같은 주소에 있는 배열을 가르키게 된다.
a=[]
a[:]=b
는 a가 다른 주소에 b와 같은 원소들을 가지게 된다.
다음 예시를 보자.
각 각의 케이스의 결과를 직접 비교해봐라.
케이스 1)
케이스 2)