Pythonで参照の扱いに注意1

これは散々言われてきた事と思うが, Pythonではリストや辞書などが基本参照扱いになるため, 一見不思議な挙動になることがある. 注意していたつもりだが, 軽く陥ったのでメモしておく.

>>> burger1 = [[]] * 10
>>> print burger1
[[], [], [], [], [], [], [], [], [], []]
>>> burger[0].append("spam")
>>> print burger1
[['spam'], ['spam'], ['spam'], ['spam'], ['spam'], ['spam'], ['spam'], ['spam'], ['spam'], ['spam']]

ってな具合です. ちゃんと調べたわけではないが, リスト内包表記を使えばとりあえず解決する.

>>> burger2 = [[] for _ in range(10)]
>>> burger2[0].append("spam")
[['spam'], [], [], [], [], [], [], [], [], []]