더북(TheBook)

2.5 가변 객체에 대한 복사 대 참조

앞 절의 내용에서 주어진 범위 내의 모든 파이썬 표현식이 정의 시점에 평가된다는 사실을 잊기 쉽다는 것을 알았습니다. 가끔 가변 기본 매개 변수로 인한 문제를 겪지만, 다른 구조 역시 문제의 소지가 있습니다.

예를 들어 목록의 목록을 초기화하는 작업4은 흔히 발생하는데, 이를 곧이곧대로 처리하는 방법은 다음과 같습니다.

파이썬에서 ‘비어 있는’ 목록의 목록을 생성하기(잘못된 방법)

>>> from pprint import pprint
>>> from enum import Enum
>>> Color = Enum("C", ["BLANK", "RED", "GREEN", "BLUE"])
>>> grid = [[Color.BLANK] * width] * height
>>> pprint(grid)
[[<C.BLANK: 1>, <C.BLANK: 1>, <C.BLANK: 1>, <C.BLANK: 1>],
 [<C.BLANK: 1>, <C.BLANK: 1>, <C.BLANK: 1>, <C.BLANK: 1>],
 [<C.BLANK: 1>, <C.BLANK: 1>, <C.BLANK: 1>, <C.BLANK: 1>],
 [<C.BLANK: 1>, <C.BLANK: 1>, <C.BLANK: 1>, <C.BLANK: 1>],
 [<C.BLANK: 1>, <C.BLANK: 1>, <C.BLANK: 1>, <C.BLANK: 1>]]
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.