수정 불가능한 객체: immutable 객체 ex)int, float, str, tuple
수정 가능한 객체: mutable 객체 ex)list, dict
a = "hello"
b = ["hello", "python"]
변수 a는 문자열 객체를 바인딩하고 변수 b는 리스트 객체를 바인딩한다
a, b 변수가 바인딩하는 각 객체의 주소를 출력해보면 서로 같음을 확인할 수 있다
a = "python2"
id(a) #4399272816
a = "python3"
id(a) #4399272880
a = ["python2", "python3"]
id(a) #4398197808
a.append("python4")
#a = ['python2', 'python3', 'python4']
id(a) #4398197808
id(a[0]) #4399272816
id(a[1]) #4399272880
id(a[2]) #4399272944
a라는 변수는 리스트 객체를 바인딩중
리스트에 값을 추가해도 리스트 객체의 시작 주소 값은 변하지 않음
Mutable 객체는 수정되어도 해당 객체의 주소는 같은 값을 유지한다.
a = [1,2,3]
b = [a, [4,5,6], [7,8,9]]
#b = [[1,2,3], [4,5,6], [7,8,9]]
id(a) #4398197808
a[2] = 10
#b = [[1,2,10], [4,5,6], [7,8,9]]
id(a) #4398197808
a의 주소 값은 리스트 내부 값이 변해도 변하지 않는다.
따라서 a를 요소로 같는 이차원 배열 b는 바꾸지 않아도 a의 내부값이 바뀜에 따라 바뀌게 된다.