할당과 복사
할당과 복사의 차이
파이썬에서는 데이터도 객체이다
리스트(딕셔너리) 할당과 복사
변수에 데이터가 저장된다. => 변수가 데이터를 가르킨다.
x = 200
y = 200
메모리상에서는
객체200이 있고
x가 200을 가르키고
y가 200을 가르킨다.
리스트할당방식
x = [1,2,3,4,5]
y = x
메모리상에서는
객체[1,2,3,4,5]
x가 [1,2,3,4,5]라는 객체를 가르키고 있다.
그런x를 y가 가르키므로
y도 [1,2,3,4,5]라는 객체를 가르키고 있다.
이때 만약 y[1]=100으로 값을 바꾸게 되면
객체자체가 변경되므로 [1,100,3,4,5]가 되고
x도 이를 가르키고 있으므로 값이 바뀌게 된다
x = [1,2,3,4,5]
y = x
y[0] = 0
print(x)
print(y)
[0, 2, 3, 4, 5]
[0, 2, 3, 4, 5]
리스트 복사 방식
x = [1,2,3,4,5]
y = x.copy()
메모리상에는
x가 가르키는 [1,2,3,4,5]객체
y가 가르키는 [1,2,3,4,5]객체가 각각 생긴다.
x = [1,2,3,4,5]
y = x.copy()
y[0] = 0
print(x)
print(y)
[1, 2, 3, 4, 5]
[0, 2, 3, 4, 5]
y값을 변경해도 x의 값은 변경되지 않는다.
다차원리스트(중첩) 복사 방식
중첩리스트의 복사방법
import copy
x = [[1,2],[3,4]]
y = copy.deepcopy(x)
y[0][1] = 5
y[1][1] = 10
print(x)
print(y)
[[1, 2], [3, 4]]
[[1, 5], [3, 10]]
중첩리스트의 경우 copy모듈을 import해주어야한다.
y값을 변경해도 x의 값은 변경되지 않는다.