>  기사  >  백엔드 개발  >  Python 함수 매개변수의 차이점

Python 함수 매개변수의 차이점

大家讲道理
大家讲道理원래의
2017-05-28 09:56:401732검색

python을 사용하는 과정에서 함수 매개변수list일 때 list.append가 내부에서 호출되는 것을 발견했습니다. () 함수는 C/C++와 다른 형식 매개변수를 변경합니다. 관련 정보를 확인하고 여기에 기록합니다.

object


>>> 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

)은 모두 불변형 객체이고, 어휘 유형(dictionary 및 list의 객체는 가변형 객체)입니다


따라서 매개변수를 전달할 때 주의하시기 바랍니다

.

위 내용은 Python 함수 매개변수의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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