Python 은 명시적인 Call by Reference 혹은 Call by Value 라는 개념이 존재하지 않는다.


Python의 function에 argument 를 전달할 때, 이는 Manual 에 따르면 call by assignment 라는 방식으로 전달된다. 


이는 Parameter로 전달받는 객체에 따라 객체의 참조방식이 결정된다는 의미로, 공식 문서에 따르면 Mutable Object 는 Call by reference의 형태로 참조형으로 변수를 다루며 Immutable Object는 Call by value 의 형태로 변수를 핸들링한다.


- Mutable Object : list, dict, set 등의 객체


- Immutable Object : str, int, tuple 등의 객체


가령 다음과 같은 코드는 전달되는 객체에 따라 파이썬이 변수를 어떻게 핸들링하는 지를 간단하게 보여준다.




출력 결과는 다음과 같다. 

foo 함수의 경우 int 형을 핸들링하기 때문에 call by value 로 새로 변수를 할당해서 처리하는 모습을 보여주고 list 를 입력받은 foo2 함수의 경우 call by reference 로 전달 받은 객체를 직접 변경하는 모습을 볼 수 있다.




'Programming Language > Python' 카테고리의 다른 글

Python 의 Package 와 __all__ 키워드  (0) 2018.09.25
Python 2 버전과 3 버전의 차이  (0) 2018.08.04


 Python2 3 간에는 생각보다 backward compatibility 를 지원하지 않는 경우가 많은데,

가령 차이점으로는 다음과 같은 것들이 있다.


-      Python3 부터는 모든 변수가 객체(Object)로 처리된다.

-      Python3 에서는 xrange를 지원하지 않는다. Python2 xrange는 정해진 숫자만큼 object를 생성하는 lazy process 방식이고 looping 동작에서 memory efficient 를 갖는다. 그러나 3부터는 모두 range를 사용하며 대체가 불가능하다.

-      Python3 에서 연산은 자동 타입할당이 제공된다.

-      Python3 에서 print 문은 함수로써 동작하므로 괄호가 필수이다.

-      Python3 에서 기존 Python2 long Int로 통일되었다.


그 외에도 유니코드 및 에러 핸들링 부분에서 차이가 있으며, 자세한 건 다음 링크의 설명이 도움이 될 수 있다.


https://www.geeksforgeeks.org/important-differences-between-python-2-x-and-python-3-x-with-examples/



'Programming Language > Python' 카테고리의 다른 글

Python 의 Call by assignment 의 개념  (0) 2018.10.07
Python 의 Package 와 __all__ 키워드  (0) 2018.09.25

+ Recent posts