Python에서 참조 대 값으로 전달

Pass Reference Vs



Python을 알게 된 후, 특히 다른 많은 컴퓨터 언어에 대해 알고 있는 경우 함수가 예상대로 인수를 변경하지 않는 경우를 찾을 수 있습니다. 많은 언어에서 메서드 인수를 참조로 사용하며 Reference에 의해 현재 변수에 전달되는 것으로 정의됩니다. 메소드 인수를 처리하는 Python의 특정 방법을 이해하려는 고급 Python 개발자라면 이 가이드가 정말 적합합니다.

Python은 객체 참조에 의한 전달을 지원합니다.

참조에 의한 전달과 값에 의한 전달은 프로그래밍 언어 간에 매개변수를 전달하는 가장 잘 알려져 있고 쉽게 이해할 수 있는 두 가지 방법입니다. Python은 슬프게도 '객체 참조에 의한 전달'이며, 값에 의한 전달이나 참조에 의한 전달이 아니며, 종종 객체 참조 호출 및 공유 호출이라고도 합니다. 참조로 전달하는 기술적인 세부 사항에 뛰어드는 동안 개념 자체를 세그먼트로 분할하여 더 자세히 살펴보는 것이 유용합니다.







통과하다: 이는 메소드에 인수를 제공하는 것을 의미합니다.



참고로: 이것은 메소드로 이동한 인수가 해당 변수의 다른 복제본 대신 스토리지에 상주하는 변수를 참조한다는 것을 의미합니다.



정의된 변수에 메서드 참조를 할당하면 해당 변수는 이 참조의 모든 작업에 의해 명시적으로 영향을 받습니다. 이제 실제로 이것이 어떻게 작동하는지 예를 살펴보겠습니다. 이 예에서는 변수 ' 화난' 의 값을 갖는 4 . 이 시나리오 전체에서 변수 ' 화난' 그 자리에서 수정되지 않았습니다. Python은 현재 변수를 자체 포함된 값으로 참조하는 대신 제공된 인수를 처리하는 것 같습니다.





이것은 참조 대신 Python이 값으로 인수를 이동한다는 것을 의미합니까? Python은 할당을 통해 인수를 이동하므로 참조 또는 값으로 이동하지 않습니다. 이에 대한 논리는 두 가지입니다.



현재 전달되는 매개변수는 객체에 대한 포인터입니다. 특정 유형의 데이터는 변경 가능하고 일부는 변경 불가능합니다.

변경 가능한 객체를 함수로 이동하면 해당 함수는 동일한 객체에 대한 참조를 획득하므로 영혼이 만족할 때까지 모두 변경할 수 있습니다. 그러나 함수에서 참조에 다시 조인하기 전에는 외부 범위에서 아무것도 알 수 없습니다. 완료되면 외부 참조는 실제 개체만 목표로 합니다. 변경할 수 없는 개체를 함수로 이동하면 외부 참조가 항상 다시 결합될 수 없으며 개체를 변경할 수도 없습니다. 일을 훨씬 더 간단하게 하기 위해 하나씩 이해해 봅시다.

참조로 전달

먼저 변수 'mylist' 자체가 목록이 아니라 값이 있는 목록을 참조한다는 점을 이해해야 합니다. 그 안에 값이 있는 컨테이너 변수 'mylist'를 호출할 수 있습니다. 목록 값은 개체입니다. 'mylist' 변수는 내용과 함께 함수에 바로 전달되었습니다.

아래 코드 예제에서 list와 my list는 모두 동일한 스토리지 변수인 것 같으므로 동일한 스토리지 객체에 적용됩니다. 그렇기 때문에 출력 시 'Saeded'가 출력됩니다.

변수 또는 엔터티에서 수행된 모든 작업은 호출자 메서드에 즉시 미러링됩니다. 이 방법은 변수의 값을 완전히 수정하고 완전히 별개의 객체를 목표로 할 수 있습니다. 'set_list' 함수에서 볼 수 있듯이 목록 내용을 변경하고 'Aqsa' 요소를 포함하는 완전히 새로운 목록을 인쇄했습니다. 이는 수정된 목록을 반환하고 호출자와 같은 줄에 인쇄했기 때문입니다.

이 메서드는 또한 아래와 같은 결과를 위해 변수의 요소를 재할당할 수 있습니다. 목록에 새 값을 추가하고 변경 사항이 반영된 것을 볼 수 있습니다. 목록에 고유한 문자열을 추가하고 호출자에게 반환했습니다. 결론적으로 메서드와 호출자는 통과 관계 전체에서 동일한 변수와 개체를 사용하고 있습니다.

값으로 전달

값에 의한 전달을 통해 메서드는 호출자가 할당한 인수 개체의 복제본과 함께 제공됩니다. 이렇게 하면 원래 항목이 변경되지 않고 모든 수정 사항이 동일한 개체의 복제본에 있는 별도의 메모리 위치에 유지됩니다.

메서드에 의해 변수 또는 엔터티에서 실행되는 모든 작업에 동일하게 유효합니다. 호출자 메서드의 범위에 있는 변수 및 개체의 중복은 요약하기 위해 완전히 분리됩니다.

참조로 개체 전달

이 상황에서 Python은 별개이기 때문에 Python의 메서드는 호출자가 참조하는 저장소에서 매우 유사한 객체 참조를 얻습니다. 반대로 이 기술은 변수 'mylist'(컨테이너)를 얻지 못합니다. 호출자 메서드는 동일한 개체를 저장합니다. 이 메서드는 값으로 전달하는 것처럼 컨테이너를 생성하고 자체적으로 완전히 새로운 인덱스를 생성합니다.

호출자와 메서드는 저장소에 있는 동일한 개체에 대해 이야기하지만 추가된 메서드가 목록에 외부 항목을 적용하면 호출자 엔터티가 수정됩니다. 여러 레이블이 있지만 동일한 것입니다. 두 변수 모두 매우 유사한 객체를 보유합니다. 그것은 물체에 의해 움직이는 것과의 관계 뒤에 숨겨진 의미입니다. 저장소에서 메서드와 호출자는 유사한 개체를 사용하지만 여러 변수를 통해 이를 포착합니다. 호출자 변수(컨테이너)는 메서드 변수(컨테이너)를 수정해도 변경되지 않습니다. 데이터 또는 콘텐츠만 수정됩니다.

결론

Python은 참조 또는 인수 값에 의한 이동을 허용하는 언어와 독립적으로 작동합니다. 메서드 인수는 메서드에 전송된 각 값에 할당된 지역 변수입니다. 그러나 그렇다고 해서 프록시로 인수를 이동하는 동안 다른 언어에서 찾을 수 있는 것과 동일한 결과를 얻을 수 있는 것은 아닙니다.