2 мар. 2009 г.

Python: двухмерный массив

Если теория подтверждается экспериментом - это хорошо,
если не подтверждается - это интересно.

Потребовалось красиво создать boolean двухмерный массив, например 3 * 3, на python:
[[False]*3]*3
Коллега подсказал, что возможны проблемы при использовании подобного подхода:
>>> x = [[True]*3]*3
>>> x
[[True, True, True], [True, True, True], [True, True, True]]
>>> x[0][0]=False
>>> x
[[False, True, True], [False, True, True], [False, True, True]]

почему так происходит ? ответ:
>>> id(x[0])
3086739084L
>>> id(x[1])
3086739084L
>>> id(x[2])
3086739084L

а по сему правильно будет
x = [[False]*3 for i in range(3)]

2 комментария:

Анонимный комментирует...

Спасибо

olga комментирует...

спасибо! ломала голову как же это =) а оказывается так просто