본문 바로가기

공부/python

[python] 파이썬의 공포(1): 사전형

>>> A = {'name':'apple','color':'red'}
>>> B = A
>>> A
{'color': 'red', 'name': 'apple'}
>>> B
{'color': 'red', 'name': 'apple'}
>>> B['color']
'red'
>>> B['color'] = 'green'
>>> B
{'color': 'green', 'name': 'apple'}
>>> A
{'color': 'green', 'name': 'apple'}


원인은

>>> A = {'name':'apple','color':'red'}
>>> B = A
>>> print hex(id(A)), hex(id(B))
0x30d2bd8L 0x30d2bd8L


B = A 에서 어드레스까지 그대로 복사하는바람에,

결국 같은 포인터.


이럴때는

import copy

해서

B = copy.copy(A)

B = copy.deepcopy(A)


이렇게 쓰면 된다

>>> B = copy.copy(A)
>>> print hex(id(A)), hex(id(B))
0x30d2bd8L 0x2e68478L


다른 어드레스에 보존 되어있음을 알 수 있다.



copy, deepcopy 와의 차이점은

다음번에 필요해지면 알아보자.