내가 만든 파이썬 클래스에 약간의 문제가 있습니다. 관련없는 코드를 제거하여 디버깅 할 수있는 가장 간단한 클래스를 만들려고했습니다. 나는 여전히 같은 문제가있다.파이썬 메서드 반환 값
class MyClass(object):
def __init__(self):
self.row = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
def get_row(self):
return self.row
if __name__ == "__main__":
a = MyClass()
b = a.row
b.remove('1')
print(a.row)
print(b)
출력은 다음과 같습니다 어떤 일이 일어나고 것은
['2', '3', '4', '5', '6', '7', '8', '9']
['2', '3', '4', '5', '6', '7', '8', '9']
나는 b.remove을 수행 할 때 ('1'은)는 예상대로 B 목록에서 첫 번째 항목을 제거하지만 내가 볼 때 그것은 또한 그것으로부터 제거되었습니다. 클래스에 대한 나의 이해와 리턴 값은 b가 a의 사본 이었음에 틀림없지 만,이 경우에는 포인터와 같이 행동하는 것처럼 보입니다.
이것이 실제로 어떻게 작동했는지 설명하는 데 도움이 될 것입니다. 파이썬 문서에서
이해가 잘못되었습니다. 모든 값은 파이썬의 객체이며 속성과 이름은이 객체에 대한 참조입니다. 'a.row'는 목록에 대한 참조입니다. 값 자체가 아닌 ** 참고 **를 복사하는 것입니다. –