>백엔드 개발 >파이썬 튜토리얼 >Python의 할당별 전달은 변경 가능 및 불변 유형에 어떤 영향을 줍니까?

Python의 할당별 전달은 변경 가능 및 불변 유형에 어떤 영향을 줍니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-01 02:49:10340검색

How Does Python's Pass-by-Assignment Impact Mutable and Immutable Types?

참조에 의한 전달 vs. 값에 의한 전달

Python에서 함수에 변수를 전달할 때 인수는 항상 할당에 의해 전달됩니다. 이는 함수의 매개변수가 전달된 객체에 대한 참조라는 것을 의미합니다.

그러나 Python은 변경 가능한 유형과 불변 유형을 구별하므로 전달된 변수의 동작은 다음과 같습니다.

변경 가능한 유형:
변경 가능한 유형의 경우 전달된 매개변수는 전달된 것과 동일한 객체를 참조합니다. 함수에서 객체에 대한 변경 사항

불변 유형:
불변 유형의 경우 전달된 매개변수는 전달된 객체의 복사본입니다. 함수는 외부 범위에 반영되지 않습니다.

예:

이 Python을 고려하세요. class:

class PassByReference:
    def __init__(self):
        self.variable = 'Original'
        self.change(self.variable)
        print(self.variable)

    def change(self, var):
        var = 'Changed'

이 클래스의 인스턴스가 생성될 때:

PassByReference()

출력은 'Original'입니다. 이는 'change' 메소드의 'var' 매개변수가 외부 범위에 있는 'variable' 속성의 복사본이기 때문입니다. 따라서 메서드 내에서 'var'을 수정해도 원래 '변수'에는 아무런 영향이 없습니다.

불변 유형에 대한 참조에 의한 전달 달성

불변 유형에 대한 참조에 의한 전달 동작을 달성하려면, 새 값을 반환하거나 래퍼를 사용하는 등의 기술을 사용할 수 있습니다.

새 값 반환 값:

def change_immutable(parameter):
    new_parameter = 'Changed'
    return new_parameter

result = change_immutable('Original')

이 경우 'change_immutable' 함수는 새 값을 반환한 다음 'result' 변수에 할당됩니다.

래퍼 사용:

class ImmutableWrapper:
    def __init__(self, value):
        self.value = value

def change_immutable_wrapper(wrapper):
    wrapper.value = 'Changed'

immutable_wrapper = ImmutableWrapper('Original')
change_immutable_wrapper(immutable_wrapper)
print(immutable_wrapper.value)  # Outputs 'Changed'

이 접근 방식에서는 객체 래퍼를 사용하여 불변 값을 보유합니다. 래퍼 값에 대한 변경 사항은 외부 범위에 반영됩니다.

위 내용은 Python의 할당별 전달은 변경 가능 및 불변 유형에 어떤 영향을 줍니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.