python을 사용하는 과정에서 함수 매개변수가 list일 때 list.append가 내부에서 호출되는 것을 발견했습니다. () 함수는 C/C++와 다른 형식 매개변수를 변경합니다. 관련 정보를 확인하고 여기에 기록합니다.
>>> num1 = 10>>> num2 = num1>>> num3 = 10>>> id(num1)4299190320>>> id(num2)4299190320>>> id(num3)4299190320
의 메모리 주소를 얻을 수 있습니다. num1, num2, num3이라는 세 객체가 주소를 가리키고 있습니다. Python은 이를 완료하기 위해 referencecounting이라는 메서드를 사용합니다. 이는 C++zhong의 Variable값 할당과 매우 유사합니다. 변수는 동일합니다. 동일한 객체의 참조 카운터는 공간을 재할당하는 대신 +1입니다.
목록 객체의 경우 다음과 같은 결과를 볼 수 있습니다.
>>> list1 = [,>>> list2 = [,>>> >>> 4302498128
list1과 list3이 동일한 공간을 가리킵니다. , list2는 다른 주소를 가리킵니다.
파이썬에서 전달되는 함수 매개변수는 객체 전달이며, 매개변수 전달 프로세스에는 두 가지 규칙이 있습니다.
로컬 범위의 객체에 매개변수를 복사합니다. 이는 C 언어와 동일한 복사 문제가 있기 때문에 함수 매개변수에 액세스하는 데 사용되는 변수가 함수에 발생한 개체와 아무 관련이 없다는 것을 의미합니다. 그리고 로컬 개체를 수정해도 개체가 변경되지 않습니다. 원본 데이터
수정 가능한 객체는 주로 목록과 사전입니다. 이 적절한 위치는 본질적으로 이전에 분석된 로컬 하위 객체의 수정이 사전 객체 또는 목록 객체의 ID를 변경하지 않는다는 결과입니다. 다음과 같습니다:
def incrInt(num): pId(num) num += 1; pId(num)def incrList(listArg): pId(listArg) listArg.append(1); pId(listArg)def pId(arg): print id(arg) num1 = 10pId(num1) incrInt(num1)print(num1) list1 = [0,2] pId(list1) incrList(list1)print(list1)
함수 내부에서 int 값이 변경되면 num이 다른 메모리 주소를 가리키고, 목록이 수정되면 동일한 메모리 주소에 있음을 알 수 있습니다.
파이썬에서 객체는 가변형(mutable)과 불변형(immutable)의 두 가지 유형으로 나눌 수 있습니다. Tuple, number,
string(
string
따라서 매개변수를 전달할 때 주의하시기 바랍니다
위 내용은 Python 함수 매개변수의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!