[Python] call by value? call by reference?

5816 단어 pythonpython

Mutable vs Immutable

  • Mutable object (값 변경 가능)
    - list
    • dict
    • set
  • Immutable object (값 변경 불가)
    - int
    • float
    • string
    • tuple
    • bool

Python의 변수

  • python에서 사용하는 변수는 객체 (python의 모든 것은 객체!?)
    - 하나의 객체는 단 하나의 인스턴스로 존재(singleton)
a = 1
a += 2
  • a가 가리키는 메모리 공간에 1이라는 값이 할당 (X)
  • 1이라는 객체의 인스턴스의 주소값을 a가 가리키게 됨
  • 2행이 실행되면 a가 가리키는 인스턴스가 바뀌게 되는 것
  • python은 C처럼 변수라는 메모리 공간에 값을 직접 저장하지 않음
  • 해당 값의 인스턴스를 가르키고 해당 인스턴스의 Reference count를 증가시킨다

Passed by assignment

  • 전달되는 객체의 특성에 따라 call by value 또는 call by reference 처럼 동작한다
  • mutable
    - call by reference 처럼 보이게 동작
  • immutable
    - call by value 처럼 보이게 동작
  • 예시
a = b = 2
a = 3
print(a, b)

c = d = [1, 2, 3]
c[1] = 10
print(c, d)

>>> 3 2
[1, 10, 3] [1, 10, 3]

def mutable(param):
    param += 1

def immutable(param):
    param[1] = 10

a = 1
b = [1,2,3,4]
print(a, b)

mutable(a)
immutable(b)
print(a, b)

>>> 1 [1, 2, 3, 4]
1 [1, 10, 3, 4]

좋은 웹페이지 즐겨찾기