본문 바로가기

파이썬3/기초

변수 (variable)와 카피 (copy)

728x90
반응형

변수 (variable)는 어떤 값을 저장하는 것이라고 생각하면 된다.

변수에 값이 정해지면 고유한 아이디로 컴퓨터 메모리에 저장된다.

a = 'hi'
id(a) # 1469665135856

b = a
id(b) # 1469665135856

파이썬의 경우 새로운 변수 이름 (b)에 기존의 변수 (a)를 넣는 식으로 하면 동일한 메모리에 지정되는 특징이 있다.

그래서 메모리 아이디가 동일하게 나온다. 이것은 메모리를 효율적으로 쓰게 해주지만 거꾸로 리스트와 같은 것을 다룰 때 문제가 되기도 한다.

a = [1,2,3]
b = a

# a[0]값 변화
a[0] = 4
a # [4,2,3]
b # [4,2,3]

a를 바꿨더니 b도 바뀌는 것을 볼 수 있다. 이러한 것을 막기 위해선 copy모듈을 사용해야한다.

copy는 다시 shallow copy와 deep copy로 나뉘는데 deepcopy로 하는게 실수를 막기 용이하다.

import copy
a = [1,[1,2,3,4]]

# Shallow copy
b = copy.copy(a)
a[0]=4
a # [4,[1,2,3,4]]
b # [1,[1,2,3,4]]

b[1][0] = 5
a # [4,[5,2,3,4]]
b # [1,[5,2,3,4]]

# Deep copy
c = copy.deepcopy(a)
a[0]=5
a # [5,[5,2,3,4]]
c # [4,[5,2,3,4]]

c[1][0] = 10
a # [5,[5,2,3,4]]
c # [4,[10,2,3,4]]

위와같이 deepcopy를 해야 리스트안에 있는 리스트의 원소를 바꿀 때도 영향이 없는 것을 볼 수 있다.

728x90
반응형

'파이썬3 > 기초' 카테고리의 다른 글

비교 연산자 (Comparison Operators)  (0) 2022.01.08
파이썬 if/else문  (0) 2022.01.08
불 (bool) 자료형  (0) 2021.12.30
집합 (set)  (0) 2021.12.29
딕셔너리 (dictionary)  (0) 2021.12.28