2014-01-20 2 views
3

Я хочу создать матрицу списка, но когда я создаю списки внутри матрицы, она создала связанный список, и мне это не нужно.Матрица списков - Python

A=[[{}]*3]*3 
result: [[{}, {}, {}], [{}, {}, {}], [{}, {}, {}]] 
A[0][2]['h1']=1 
result: [[{'h1': 1}, {'h1': 1}, {'h1': 1}], 
[{'h1': 1}, {'h1': 1}, {'h1': 1}], 
[{'h1': 1}, {'h1': 1}, {'h1': 1}]] 

Кто-нибудь знает, как этого избежать? Мне нужен список внутри каждого поля матрицы.

ответ

10

Вы инициализируете A с 3 ссылками на один и тот же список, и каждый из этих списков инициализируется 3 ссылками на тот же словарь. Вместо этого попробуйте явно вызвать конструктор для каждого подсписка и словаря:

>>> A = [ [{} for _ in range(3) ] for _ in range(3) ] 
>>> A[0][2]['h1']=1 
>>> A 
[[{}, {}, {'h1': 1}], 
[{}, {}, {}], 
[{}, {}, {}] 
] 

Как примечание стороны, "linked list" обычно относится к структуре данных одного и того же имени, а не случай, когда у вас есть несколько ссылок на один и тот же объект ,

Смежные вопросы