10. 클래스(class)/기초
[파이썬 클래스] 원본 변수가 바뀌는 경우 해결 (copy 함수를 사용해야 하는 이유)
만다린망고
2023. 5. 25. 15:54
반응형
아래 코드를 봅시다. 어떻게 동작하는지 먼저 이해해봅시다.
class add :
def __init__(self,lst):
self.lst=lst.append(5)
a=[1,2,3,4,5]
mcls=add(a)
위 코드는는 a를 [1,2,3,4,5,5] 으로 바꾸고 mcls.list 에는 아무것도 저장되지 않습니다. 결과는 아래와 같습니다 .
>>> a
[1, 2, 3, 4, 5, 5]
>>> mcls.list
list.append(5) 의 결과가 none 이기 때문입니다. 클래스 안의 def 에서 변수를 입력받을 때 참조해서 가져오기 때문에 append 를 적용하면 원본인 a가 바뀝니다.
변수를 참조가 아닌 복사해서 가져오는 방법은 아래와 같습니다. copy 함수를 사용하면 됩니다.
class add :
def __init__(self,lst):
self.lst=lst.copy()
self.lst.append(5)
a=[1,2,3,4,5]
mcls=add(a)
결과는 아래와 같습니다. a는 유지되고, mcls 에는 5가 추가된 리스트가 입력됩니다.
>>> a
[1, 2, 3, 4, 5]
>>> mcls.lst
[1, 2, 3, 4, 5, 5]
반응형