질의응답 게시판
class AdvancedList(list):
def replace(self,a,b):
while a in self:
self[self.index(a)] = b
x = AdvancedList([1,2,3,1,2,3,1,2,3]):
x.replace(1,100)
print(x)
위 코드는 list 클래스를 상속받는 AdvancedList 클래스를 만들어서
replace 라는 메서드를 만드는 코드인데요
위처럼 replace 메서드에서 전달받은 리스트객체를 직접 수정하는 코드는 쉽게 이해가 되는데
class AdvancedList(list):
def replace(self,a,b):
self = list(map(lambda x : b if x==a else x,self))
x = AdvancedList([1,2,3,1,2,3,1,2,3]):
x.replace(1,100)
print(x)
이렇게 리스트를 만들어서 다시 할당하는 느낌으로 코드를 만들면
의도와는 다르게
[1,2,3,1,2,3,1,2,3] 이 출력되더라고요
왜 안될까 생각하다가
replace 메서드 부분의
self = list(map(lambda x : b if x==a else x,self)) 밑에다가
print(self) 를 추가하면
[100,2,3,100,2,3,100,2,3]
[1,2,3,1,2,3,1,2,3]
이렇게 출력되는걸 보고
replace의 매개변수 self 가 map 함수의 self 로 전달되는거 까지는 의도대로 됬는데
다시 할당할때의 self 는 별개의 객체라는 걸 알게됬습니다.
여기서 의도대로 원래의 리스트 [1,2,3,1,2,3,1,2,3] 에 접근해서 재할당하려면 어떻게 해야하나요?