늘 python 함수 매개 변수의 차이 점 에 대해 이야기 합 니 다(필수 편)

python 을 사용 하 는 과정 에서 함수 매개 변수 가 list 일 때 함수 내부 에서 list.append()를 호출 하면 형 삼 이 바 뀌 고 C/C++와 다 르 게 관련 자 료 를 찾 아 기록 합 니 다.
python 에서 id 는 대상 의 메모리 주 소 를 가 져 올 수 있 습 니 다.

>>> num1 = 10
>>> num2 = num1
>>> num3 = 10
>>> id(num1)
>>> id(num2)
>>> id(num3)
num 1,num 2,num 3 세 대상 이 가리 키 는 주 소 를 볼 수 있 습 니 다.python 은 여기 서 인용 계수 라 는 방식 으로 이 루어 졌 습 니 다.C+zhong 과 유사 한 스마트 포인터 입 니 다.변 수 는 같은 대상 에 게 계수+1 을 참조 하 는 것 이지 새로운 분배 공간 을 다시 만 드 는 것 이 아 닙 니 다.
list 대상 에 대해 다음 결 과 를 볼 수 있 습 니 다:

>>> list1 = [0,1]
>>> list2 = [0,1]
>>> id(list1)
>>> id(list2)
>>> list3 = list1
>>>id(list3)
list 1 과 list 3 은 같은 공간 을 가리 키 고 list 2 는 다른 주 소 를 가리킨다.
python 의 함수 전 삼 은 대상 전달 이 고 부분 과 전체적인 문제 도 존재 하 며 전 삼 과정 에서 두 가지 규칙 이 존재 합 니 다.
인용 을 통 해 파 라 메 터 를 부분 적 인 역할 영역 에 복사 하 는 대상 에서 함수 매개 변수 에 접근 하 는 변 수 는 함수 대상 에 게 향상 시 키 는 것 과 무관 하 다 는 것 을 의미 합 니 다.복사 문제 가 존재 하기 때문에 이것 은 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 = 10
pId(num1)
incrInt(num1)
print(num1)

list1 = [0,2]
pId(list1)
incrList(list1)
print(list1)
결 과 는 다음 과 같다.

python test.py
4299181904
10
4336979912
[0, 2, 1]
함수 내부 에서 int 의 수 치 를 바 꾸 면 num 은 다른 메모리 주 소 를 가리 키 고 list 를 수정 하면 같은 메모리 주 소 를 가리 키 는 것 을 볼 수 있 습 니 다.
python 에서 대상 은 가 변(mutable)과 가 변(immutable)두 가지 유형 으로 나 눌 수 있 으 며,원본(tuple),수치 형(number),문자열(string)은 모두 가 변 대상 이 며,사전 형(dictionary)과 목록(list)의 대상 은 가 변 대상 이다.
그 러 니 전 참 과정 에서 주의해 야 합 니 다.
이상 의 이 상투적인 python 함수 파라미터 의 차이(필수 편)는 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 에 게 참고 가 되 고 여러분 들 이 저 희 를 많이 지지 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기