마땅한 파이썬 디버그 툴을 쓰지 않기 때문에 가끔 삽질을 좀 할 때가 있는데, 오늘의 삽질 이야기.
종종 dictionary여러개가 필요해서 dictionary의 list를 U = [{} for i in rage(10)] 이런식으로 만들어서 사용하곤 했다.
며칠전에 파이썬 레퍼런스를 뒤져보다가 예제 코드에 [{}]*10 이라고 써진 걸 보고는, “오 짧네” 하고 생각없이 썼는데 이게 오늘 아침에 삽질하던 원인이었음.
결론부터 얘기하면
[{}]*10 은 dictionary하나를 생성해서 그 reference 10개의 list를 주고
[{} for i in range(10)] 은 실제로 서로 다른 dictionary 10개를 생성해서 return
실제로 아래처럼 각 object의 주소가 같고 다른걸 확인!
>>> [nx.Graph()]*3
[<networkx.classes.graph.Graph object at 0x7ff74dd4e290>, <networkx.classes.graph.Graph object at 0x7ff74dd4e290>, <networkx.classes.graph.Graph object at 0x7ff74dd4e290>]
>>> [nx.Graph() for i in range(3)]
[<networkx.classes.graph.Graph object at 0x29abdd0>, <networkx.classes.graph.Graph object at 0x29abd90>, <networkx.classes.graph.Graph object at 0x29abe10>]
오늘은 hopefully 삽질 끝.
예전 블로그에 적어두었던 내용인데 생각이 나서 다시 가져옴.
'dev' 카테고리의 다른 글
ndk-build clean 시에 Syntax error 발생할 땐. (0) | 2013.10.02 |
---|---|
Data visualization에 관한 글. (0) | 2013.09.30 |
개발자와 테스터 (0) | 2013.09.25 |
JNI 각 type별 Signature 알아내기 (0) | 2013.09.07 |
git cheet sheet (0) | 2013.03.01 |