반응형
파이썬은 모든 것이 객체다. 숫자, 문자까지도 객체다.
숫자, 문자가 리스트, 딕셔너리 같은 객체와의 차이점이라면 불변 객체라는 차이뿐이다.
그러다 보니 별도로 값을 복사하지 않는 한, 변수에 값을 할당하는 모든 행위는 값 객체에 대한 참조가 된다.
즉, 참조가 가리키는 원래의 값을 변경하면 모든 참조, 즉 모든 변수의 값 또한 함께 변경된다.
다음 예시를 보면 쉽게 이해가 간다.
b는 a를 참조하고 있기 때문에 a가 변경되면 b도 같이 변경된다.
반면 값 자체만을 복사하는 방법으로 [:] 또는 copy()를 사용하게 되면, a가 변경되어도 c와 d는 변경되지 않는다.
>> a = [1,2,3]
>> b = a
>> c = a[:]
>> d = a.copy()
>> a += [4]
>>print(a, b, c, d)
[1,2,3,4] [1,2,3,4] [1,2,3] [1,2,3]
>>print(id(a),id(b),id(c),id(d))
1643118394880 1643118394880 1643118681216 1643118681280
댓글