반응형
아래 코드를 봅시다. 어떻게 동작하는지 먼저 이해해봅시다.
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]
반응형
'10. 클래스(class) > 기초' 카테고리의 다른 글
[파이썬 클래스] 원본 변수가 바뀌는 경우 해결 (copy 함수를 사용해야 하는 이유) (0) | 2023.05.25 |
---|---|
[파이썬] 클래스 정의할 때 self 대신 다른 이름를 써도 될까 (0) | 2023.05.12 |
[파이썬] 클래스에 정의된 인스턴스 변수 보는 법 (vars) (0) | 2023.05.11 |
[파이썬] 문자열도 클래스다 (리스트,튜플,딕셔너리도) (0) | 2023.05.11 |
[파이썬] 클래스 만드는 방법 (0) | 2023.05.11 |
댓글