본문 바로가기
10. 클래스(class)/기초

[파이썬 클래스] 원본 변수가 바뀌는 경우 해결 (copy 함수를 사용해야 하는 이유)

by 만다린망고 2023. 5. 25.
반응형

아래 코드를 봅시다. 어떻게 동작하는지 먼저 이해해봅시다. 

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]
반응형

댓글