문제

bool 개체에 대한 참조를 보내고 메서드 내에서 수정했습니다.메서드 실행이 완료된 후 메서드 외부의 bool 값은 변경되지 않았습니다.

이로 인해 Python의 bool은 값으로 전달된다고 믿게 되었습니다.그게 사실인가요?다른 어떤 Python 유형이 그런 식으로 동작합니까?

도움이 되었습니까?

해결책

Python 변수는 C++ 의미에서 "참조"가 아닙니다.오히려 이는 단순히 메모리의 임의 위치에 있는 객체에 바인딩된 로컬 이름입니다.해당 객체 자체가 변경 가능한 경우 해당 객체에 대한 변경 사항은 해당 객체에 이름을 바인딩한 다른 범위에서 볼 수 있습니다.많은 기본 유형(포함 bool, int, str, 그리고 tuple) 이다 불변 하지만.해당 값을 내부에서 변경할 수는 없습니다.대신 로컬 범위에서 동일한 이름에 새 값을 할당합니다.

실제로 거의 언제든지* 다음 형식의 코드가 표시됩니다. foo = X, 그것은 이름을 의미합니다 foo 새로운 값이 할당됩니다(X)는 현재 로컬 네임스페이스 내에서 이름이 지정된 메모리 내 위치가 아닙니다. foo 대신 위치를 참조하도록 내부 포인터가 업데이트되었습니다. X.

*- Python에서 이에 대한 유일한 예외는 속성에 대한 setter 메서드입니다. obj.foo = X 대신 다음과 같은 메소드를 호출하도록 백그라운드에서 다시 작성하십시오. obj.setFoo(X).

다른 팁

물체가 변이 가능하거나 불변인지에 따라 다릅니다. 불변의 물체는 BOOL에서 본 것처럼 행동하는 반면, 변한 물체는 변할 것입니다.

참조 : http://www.testingreflections.com/node/view/5126

Python은 값 (Java와 같은)별로 참조 대사를 전달하며 Python의 모든 것은 객체입니다. 이것은 간단하게 들리지만 일부 데이터 유형은 통과 별 특성을 나타내는 것처럼 보이지만 다른 데이터 유형은 통과별로 행동하는 것처럼 보입니다. 거래는 무엇입니까?

변이 가능하고 불변의 대상을 이해하는 것이 중요합니다. 줄, 튜플 및 숫자와 같은 일부 물체는 불변입니다. 함수/메소드 내부에서 변경하면 새 인스턴스가 생성되며 함수/메소드 외부의 원래 인스턴스는 변경되지 않습니다. 목록 및 사전과 같은 다른 객체는 변동성이 있습니다. 즉, 객체를 어디에서 변경할 수 있습니다. 따라서 함수/메소드 내부의 객체를 변경하면 원래 객체를 외부로 변경합니다.

기억해야 할 것은 있다는 것입니다 아니요 함수 또는 호출 네임 스페이스에서 이름을 다시 표시하는 메소드를위한 파이썬의 방법. 당신이 "bool 객체에 대한 참조를 보냈고, 메소드 내에서 그것을 수정했다"는 것을 쓸 때, 당신이 실제로 한 일은 (내가 추측하는) 매개 변수 이름 (bool 값이 통화에 의해 결합 된)을 반점으로하는 것이 었습니다. 방법 본문.

요컨대, 파이썬에는 변수가 없습니다; 대상 (진실과 거짓, 부종은 불변이 불변)과 이름이 있습니다. 이름은 변수라고 부르는 것이지만 이름은 범위에 속하며 일반적으로 로컬 이름 이외의 이름을 변경할 수는 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top