매개 변수 전달 함수
값으로, 값이 두 가지 함수의 인수를 전달하고 참조로 전달하기 만 인자에 변수의 값을 복사, 외부 함수의 내부 기능의 동작이 송신되는 변수의 값을 변경하고, 외부 변수에 대한 참조를 전달하지 않는다 어드레스 함수는 직접 내부 변화 것 일반적 기능, 외부 변수의 함수 값을 호출 한 후, 외부 변수의 저장 기능을 작동
def Demo(a):
a = a + 1
print(id(a))
if __name__ == '__main__':
a = 3
print(id(a)) # 140705335465056
Demo(a) # 140705335465088
print(id(a)) # 140705335465056
, 튜플, 전송 값의 시간에 배달 증명은 너무 변수의 값 및 문자의 다른 유형 인 함수 호출 전후의 변수 값의 주소에 변화를 볼 다음 목록에 시도
def Demo(a):
a.append(3)
print(id(a))
if __name__ == '__main__':
s = [1,2]
print("value = " + str(s) + "address = " + str(id(s))) # value = [1, 2]address = 1574898786888
Demo(s) # value = [1, 2, 3]address = 1574898786888
print("value = " + str(s) + "address = " + str(id(s))) # value = [1, 2, 3]address = 1574898786888
어드레스 값 일치 함수 호출은 참조를 전달하는 증명하고, 함수 값 후도를 나타내는 변경이 실행되는 a.append()
것을들에서 메모리 동작
당신이 튜플을 전달하면 출력이 주소의 세 번 같은 작품이다, 그래서 그것은 튜플을 수정할 수 없습니다, 그러나 매개 변수 값이 전달 될 때 실제로 튜플이 전달됩니다.
또 다른 경우
def Demo(a):
a[0].append(3)
print("value = " + str(a) + "address = " + str(id(a)))
if __name__ == '__main__':
a = ([1,2], 2)
print("value = " + str(a) + "address = " + str(id(a))) # value = ([1, 2], 2)address = 2616967970056
Demo(a) # value = ([1, 2, 3], 2)address = 2616967970056
print("value = " + str(a) + "address = " + str(id(a))) # value = ([1, 2, 3], 2)address = 2616967970056
튜플 요소가 이전 또는 함수를 호출 한 후리스트 인 경우, 함수 밖에서는 단지 말을하기 시작 통과, 그것은 느낌의 참조에 따라 변경하지만, 함수 외부에 대한, 아니 그의 첫 번째 요소는 항상 0입니다 <class 'list'>
목록의 요소가 변경되지 않은으로 APPEND () 함수를 호출하는 동안, 튜플, 상관 튜플 판사가 요소 판단 요소의 주소가 변경되지 않은 것입니다 변경되지 않았습니다하지 않아도, 전송은 목록에있는 이유 변수 요소의 주소 값은 왜 튜플은 변경할 수 없습니다, 이는 변경되지 않지만, 데이터 튜플 변수 인 경우, 다음 데이터의 유형을 변경할 수 있습니다
개요
그러한리스트, 사전, 전달 함수 파라미터시 세트 파이썬 두 개의 데이터 유형, 가변 데이터 타입 가변 비 가변 데이터, 참조에 의해 전달 같은 숫자, 문자, 튜플 함수로서 불변의 데이터 타입, 통과 파라미터 때 값 , 그러나 더 정확한 전달 함수 파라미터 사용 파이썬 통과 오브젝트 참조 변수 참조 (예를 들면 사전 또는 목록)를 상기 수신 된 객체의 함수 인 경우의 실시 예는, 원래의 객체를 수정할 수 값 - 동등한 관통 오브젝트를 전달하는 방법 "에 의해 참조." 함수는 수신 된 객체가 불변 인 경우 기준 (예컨대 숫자, 문자 또는 튜플) 직접적 원래 객체를 수정할 수 - 객체 "전통적인 가치 '에 상응 통과.
그들은 데이터 튜플에주의를 지불해야하는 상황의 변수 유형처럼