python 변수 할당 방법(가 변 및 가 변 하지 않 음)

python 에 서 는 전송 값 호출 이 존재 하지 않 습 니 다.모든 전달 은 대상 의 참조 이 고 전송 주소 라 고 볼 수 있 습 니 다.
1.가 변 대상 과 불가 변 대상
Python 이 힙 에서 분배 하 는 대상 은 두 가지 로 나 뉜 다.가 변 대상 과 가 변 대상 이다.가 변 대상 이란 대상 의 내용 이 가 변 적 이지 않 고 가 변 적 이지 않 은 대상 은 대상 의 내용 이 가 변 적 이지 않다 는 것 을 말한다.
가 변 적 이지 않 음(immutable):int,문자열(string),float,(수치 형 number),모듈(tuple)
가 변(mutable):사전 형(dictionary),목록 형(list)
가 변 하지 않 는 유형 특징:
아래 의 예 를 보 세 요(예 1)

i = 73 
i += 2 
python变量赋值(可变与不可变)
위의 그림 에서 알 수 있 듯 이 변 하지 않 는 대상 의 특징 은 변 하지 않 았 고 변 한 것 은 새로운 대상 을 만 들 었 을 뿐 변수의 대상 인용 을 바 꾸 었 다.
예 를 하나 보다(예 2)

>>>x = 1
>>>y = 1
>>>z = 1
>>> x is y
True
>>>y is z
True
위 에서 보 듯 이 정 수 는 가 변 적 이지 않 기 때문에 x,y,z 는 메모리 에서 모두 1 의 메모리 주 소 를 가리 키 고 있다.즉,x,y,z 는 모두 같은 주 소 를 가리 키 고 있 기 때문에 주의해 야 할 것 은 성형 에 있어 서 현재 지원(-1,100)만 하고 있다 는 것 이다.
가 변 적 이지 않 은 대상 의 장단 점 을 정리 하 다.
중복 되 는 값 이 메모리 공간 에 대한 점용 을 줄 일 수 있다 는 장점 이 있다.
단점 은 예 1 에서 보 듯 이 이 변수 가 연 결 된 값 을 수정 하려 고 합 니 다.만약 에 메모리 에 이 값 이 존재 하 는 메모리 블록 이 없다 면 메모 리 를 다시 열 어 새 주소 와 변수 이름 을 연결 해 야 합 니 다.변수 가 원래 가리 키 는 메모리 블록 의 값 을 수정 하 는 것 이 아니 라 실행 효율 에 어느 정도 떨 어 집 니 다.
다음은 가 변 대상 의 예(예 3)를 보 겠 습 니 다.

m=[5,9]
m+=[6]
python变量赋值(可变与不可变)
2.함수 매개 변수:
Python 함수 매개 변 수 는 가 변 대상 에 대해 함수 내 에서 매개 변수 에 대한 변 화 는 원시 대상 에 영향 을 줄 수 있 습 니 다.가 변 하지 않 는 대상 에 대해 함수 내 에서 매개 변수 에 대한 변 화 는 원시 매개 변수 에 영향 을 주지 않 습 니 다.원인 은:
1.가 변 대상,매개 변 수 는 가 변 대상 이 고 그 내용 은 수정 할 수 있 습 니 다.
2.가 변 하지 않 는 대상 은 함수 내 변수의 지향 대상 을 바 꿉 니 다.
예 를 들 어 두 개의 목록 a 와 b 가 존재 합 니 다.
a=b 라면 a 와 b 의 주 소 는 같 습 니 다.복사 만 하려 면 a=b[:]를 사용 해 야 합 니 다.

def mutable(b = []): #         
  b.append(0)
  return b
>>>mutable()
[0]
>>>mutable()
[0,0]
>>>mutable()
[0,0,0]
여기 서 세 번 연속 으로 결 성 된 값 으로 함수 3 을 실행 합 니 다.매번 결과 가 다 릅 니 다.우리 의 생각 에 따 르 면 세 번 의 결 과 는 똑 같 을 것 입 니 다.모두[0]입 니 다.하지만...
그 이 유 는 무엇 입 니까?앞에서 말 했 듯 이 모든 것 이 대상 이 고 함수 mutable 도 하나의 대상 입 니 다.dir()를 사용 하여 함수 의 속성 을 봅 니 다.

dir(mutable)

['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
위 에서 우 리 는 mutable 이라는 함 수 를 세 번 실 행 했 습 니 다.만약 mutable.defaults__함수 대상 의 기본 매개 변수 변 화 를 보면 문제 가 발생 합 니 다.

>>>mutable.__defaults__
([],)
>>>mutable()
[0]
>>>mutable.__defaults__
([0],)
>>>mutable()
[0,0]
>>>mutable.__defaults__
([0,0],)
자세히 살 펴 보면 클래스 대상 내부 속성 dict 에서'x'에 대응 하 는 값 은 대상 을 만 들 때마다 변화 가 생 겼 습 니 다.즉,클래스 대상 을 만 들 때마다 변수 x 참조 메모리 의 초기 값 이 다 릅 니 다.이것 은 목록(list)의 가 변성 으로 인 한 것 입 니 다.대상 을 만 들 때마다 목록 의 가 변성,함수 대상 b 의 dict 속성 에서 x 키 에 대응 하 는 값 이 다시 만 드 는 것 이 아니 라 바 뀌 어서 위의 결과 가 나 왔 습 니 다.
요약:초보 자가 python 의 변수 와 유형,매개 변수 전달 방식 을 충분히 이해 하지 못 하거나 모든 해석 대상 의 원 리 를 충분히 이해 하지 못 하면 위의 오류 가 발생 하기 쉽다.
이상 의 python 변수 할당 방법(가 변 과 가 변 하지 않 음)은 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 하 시기 바 랍 니 다.여러분 들 도 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기